2011-02-28 13 views
0
//header file 
class Foo 
{ 
    public: 
    struct FooBar { 
     bool ok; 
     string msg; 
    }; 
}; 

// .cpp file 
Foo::FooBar::FooBar():ok(false), msg("hello") 
{} 

コンパイルしようとすると、私が手:ネストされたクラスの初期化リストの質問

エラー:暗黙的に宣言 'はFoo :: FooBarの:: FooBarの()'

愚かな、シンプルの定義スコープに関連する間違い私は確信していますが、それが何であるかは分かりません。

答えて

5

宣言していないコンストラクタを実装しようとしています。このようにそれを宣言します。あなたは、コンストラクタを宣言する必要が

//header file 
class Foo 
{ 
    public: 
    struct FooBar { 
     FooBar(); 
     bool ok; 
     string msg; 
    }; 
}; 

// .cpp file 
Foo::FooBar::FooBar():ok(false), msg("hello") 
{} 
1

、あなたはクラスのコンストラクタの宣言を省略すると、すなわち

class Foo 
{ 
    public: 
    struct FooBar { 
     FooBar(); // <-- needed 
     bool ok; 
     string msg; 
    }; 
}; 
1

、暗黙のコンストラクタの定義は、コンパイラによって生成されます。この場合、デフォルトコンストラクタを定義していますが、宣言していないため、コンパイラは何が起こっているのか混乱しています。したがって、暗黙的に定義されたデフォルトのコンストラクタを定義していると不平を言っています。

解決策は、既定のコンストラクターを宣言して、既定のコンストラクター定義を使用することを知ることです。

関連する問題