2016-11-26 57 views
0

我无法找到任何帮助我理解下列代码无法编译的答案。 Im在类(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: 

    // ...