bra*_*ray 145 c++ forward-declaration
可能重复:
在C++中转发嵌套类型/类的声明
我有一个这样的课......
class Container {
public:
class Iterator {
...
};
...
};
Run Code Online (Sandbox Code Playgroud)
在其他地方,我想通过引用传递一个Container :: Iterator,但我不想包含头文件.如果我尝试转发声明类,我会遇到编译错误.
class Container::Iterator;
class Foo {
void Read(Container::Iterator& it);
};
Run Code Online (Sandbox Code Playgroud)
编译上面的代码给出了......
test.h:3: error: ‘Iterator’ in class ‘Container’ does not name a type
test.h:5: error: variable or field ‘Foo’ declared void
test.h:5: error: incomplete type ‘Container’ used in nested name specifier
test.h:5: error: ‘it’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
我怎样才能转发声明这个类,所以我不必包含声明Iterator类的头文件?
Jar*_*Par 129
这根本不可能.您无法转发在容器外部声明嵌套结构.您只能在容器中转发声明它.
您需要执行以下操作之一
Tod*_*ner 23
我不相信向前不完整的类作品声明内部类的(因为没有类定义,没有办法知道是否有实际的方式是一个内部类).因此,您必须包含Container的定义,并使用前向声明的内部类:
class Container {
public:
class Iterator;
};
Run Code Online (Sandbox Code Playgroud)
然后在单独的头文件中,实现Container :: Iterator:
class Container::Iterator {
};
Run Code Online (Sandbox Code Playgroud)
然后#include只包含容器标题(或者不担心前向声明并且只包括两者)