3 回答
TA贡献1848条经验 获得超6个赞
这根本不可能。您不能在容器外部转发声明嵌套结构。您只能在容器内转发声明。
您需要执行以下任一操作
将课程设为非嵌套
更改声明顺序,以便首先完全定义嵌套类
创建一个既可以在函数中使用又可以由嵌套类实现的公共基类。
TA贡献1812条经验 获得超5个赞
我不相信向前不完整的类作品声明内部类的(因为没有类定义,没有办法知道是否有实际的方式是一个内部类)。因此,您必须包含Container的定义,以及一个前向声明的内部类:
class Container {
public:
class Iterator;
};
然后在单独的标头中实现Container :: Iterator:
class Container::Iterator {
};
然后#仅包含容器标头(或不必担心前向声明,只需将两者都包含在内)
TA贡献1966条经验 获得超4个赞
我不知道完全按照自己的意愿进行操作,但是,如果您愿意使用模板,则可以采用以下解决方法:
// Foo.h
struct Foo
{
export template<class T> void Read(T it);
};
// Foo.cpp
#include "Foo.h"
#include "Container.h"
/*
struct Container
{
struct Inner { };
};
*/
export template<>
void Foo::Read<Container::Inner>(Container::Inner& it)
{
}
#include "Foo.h"
int main()
{
Foo f;
Container::Inner i;
f.Read(i); // ok
f.Read(3); // error
}
希望该惯用法可能对您有所帮助(并希望您的编译器基于EDG并实现export;))。
- 3 回答
- 0 关注
- 408 浏览
添加回答
举报