-1

我有一个班级酒吧:

class Bar
{
public:
Bar(void);
~Bar(void);
};

还有一个类Foo,它将对象的引用Bar作为构造函数参数并需要将其保存在私有成员中bar_

class Foo
{
private:

Bar& bar_;
public:
Foo(Bar& bar) : bar_(bar) {}
~Foo(void) {}
};

这不编译:

在“Foo”中找不到重载的成员函数

缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

现在我怀疑我需要保证的几件事,第二个错误是Bar& bar_;Foo. 声明时是否需要使用显式构造函数bar_

我有兴趣了解编译器在这个问题上是如何工作的,因此非常感谢详细的解释。

谢谢。

编辑

好的,我正在发布一个新代码,因为我的代码显然没有任何问题。 Parser.h

#pragma once
class Parser
{
private:
std::istream& inputStream_;
Analyzer& analyzer_;
public:
Parser(std::istream &inputStream, Analyzer& analyzer);
~Parser(void);
};

Parser.cpp

#include "stdafx.h"
#include "Parser.h"
#include "Analyzer.h"
Parser::Parser(std::istream &inputStream, Analyzer& analyzer ) : inputStream_(inputStream),     analyzer_(analyzer) {}

Parser::~Parser(void) {}

Analyzer.h

 #pragma once
class Analyzer
{
public:
    Analyzer(void);
    ~Analyzer(void);
};
4

1 回答 1

1

这不编译:

overloaded member function not found in 'Foo'    
missing type specifier - int assumed. Note: C++ does not support default-int

您提供的代码片段确实可以编译。不过,我可以告诉你一些关于这些错误的信息。

当您编译一个与您的类中声明的同名方法具有相同名称但签名不同的方法时,会出现第一条错误消息。例如,如果您有:

class A {
public:
    int foo (int);
};

int A::foo () { return 0; }

编译器将发出关于未找到重载成员函数的错误。编译器认为foo是重载的,因为foo(void)不同于foo(int).

第二个错误发生在您定义没有类型的变量或函数时。这通常不是实际问题,而是其他问题的结果。例如,如果您的代码在声明之前尝试使用类,例如:

B b;
class B {};

你会得到关于缺少类型说明符的第二个错误,但它是B在第一行讨论的。

于 2012-06-08T11:15:15.387 回答