【发布时间】:2016-10-28 21:15:28
【问题描述】:
在这个完整的代码中:
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
【问题讨论】:
-
你必须像类的任何其他成员一样在
bar()构造函数中初始化myFoo_。 -
即使您打开 C++11,仍然不允许使用括号进行类内数据成员初始化(与大括号或 = 相反)。
-
foo myFoo_ (dataPin_); // foo 的实例。那应该是函数还是变量?
-
该行应该是一个变量——
foo的一个实例。 -
我个人认为这不是重复的。我没有询问类内初始化程序,当我搜索该错误消息时,肯定没有出现“重复”问题。
标签: c++ compiler-errors