在这个完整的代码中:
class foo
{
public:
foo(const int pin);
};
class bar {
public:
// Constructor
bar(const int dataPin) : dataPin_ (dataPin) { }
private:
const int dataPin_;
foo myFoo_ (dataPin_); // instance of foo
};
int main (void)
{
return 0;
}
使用g ++ 4.8.4我收到错误:
g++ -Wall -c "test.cpp" (in directory: /home/nick/Development)
test.cpp:14:17: error: ‘dataPin_’ is not a type
foo myFoo_ (dataPin_); // instance of foo
^
Compilation failed.
使用clang 3.4-1ubuntu3我得到:
test.cpp:14:17: error: unknown type name 'dataPin_'
foo myFoo_ (dataPin_); // instance of foo
^
1 error generated.
为什么要在这里输入类型?这是尝试创建foo
的实例作为bar
的类变量。变量dataPin_
直接在上面声明。
如果我将带有错误的行更改为此行,则会干净地编译:
foo myFoo_ (int dataPin_); // instance of foo
答案 0 :(得分:7)
它正在阅读foo myFoo_ (dataPin_);
作为函数声明:myFoo_
是一个取dataPin_
并返回foo
的函数。这就是为什么它需要(
)
中的类型名称。
要解决此问题,请在构造函数中初始化myFoo_
,就像使用dataPin_
一样:
bar(const int dataPin) : dataPin_ (dataPin), myFoo_(dataPin) {}
答案 1 :(得分:-1)
这里你应该添加类型而不是变量,这是函数签名,它应该有类型而不是变量。
foo myFoo_ (dataPin_); // instance of foo