2016-11-26 18 views
0

次のコードがコンパイルされない理由を理解できた回答が見つかりませんでした。 クラスのプライベート部分(Foo)内に構造体を宣言し、このように内部クラス(Bar)内から構造体を使用しようとしています。内部クラス内でstructを使用するとコンパイルエラーが発生する

class Foo { 
public: 
    Foo(); 
    class Bar; 

    class Bar { 
    public: 
     Bar(); 
     Foo::Node createNode(); 
    }; 

private: 
    struct Node{ 
     Node(int d) : data(d) {}; 
     int data; 
    }; 
}; 

そして、コンパイラは次のエラーがスローされます。

.../Foo.h:9:14: error: no type named 'Node' in 'Foo'

+0

AC(++)コンパイラからの読み取り特定の行で型が定義されていない場合(後で定義されるため)、参照できません。解決策:クラスバーの定義の上にある構造体ノードの定義を移動します。ところで、この構造体をプライベートにすると、可視性に関する別のエラーが発生します。 – EGOrecords

答えて

1

あなたはそれを参照する前に内部クラスを宣言する必要があります:

class Foo { 
    class Node; 
public: 

    // ... 
関連する問題