//header file
class Foo
{
public:
struct FooBar {
bool ok;
string msg;
};
};
// .cpp file
Foo::FooBar::FooBar():ok(false), msg("hello")
{}
尝试编译时,我得到:
错误:隐式声明的'Foo :: FooBar :: FooBar()'的定义
愚蠢,简单的范围相关的错误我敢肯定,但我似乎无法发现它是什么......
答案 0 :(得分:5)
您正在尝试实现未声明的构造函数。声明如下:
//header file
class Foo
{
public:
struct FooBar {
FooBar();
bool ok;
string msg;
};
};
// .cpp file
Foo::FooBar::FooBar():ok(false), msg("hello")
{}
答案 1 :(得分:1)
您需要声明构造函数,即
class Foo
{
public:
struct FooBar {
FooBar(); // <-- needed
bool ok;
string msg;
};
};
答案 2 :(得分:1)
当省略类的构造函数声明时,编译器会创建隐式构造函数定义。在这种情况下,您已经定义了默认构造函数,但没有声明它,因此编译器对发生的事情感到困惑。因此,它抱怨你定义一个隐式定义的默认构造函数。
解决方案是声明默认构造函数,以便它知道使用默认构造函数定义。