C++
如果外部类至少有一个内部类实例作为数据成员,我该如何在外部类定义之外放置内部(嵌套)类的定义?我进行了搜索,但我找到的最相关的SO答案 (在源文件中定义嵌套类),没有一个例子涉及外部类具有内部对象作为数据成员。就声明而不是定义内部类而言,我遵循了那个答案,但我的代码仍然无法正常工作:
struct Outer
{
struct Inner;
Inner myinner;
Outer() : myinner(2) {}
};
struct Outer::Inner
{
Inner(int n) : num(n) {}
int num;
};
int main()
{
Outer myouter;
}
在VC11中,它会出现错误error C2079: 'Outer::myinner' uses undefined struct 'Outer::Inner'
。
为什么破碎的代码没有与Inner
在Outer
的定义内部定义的版本等效的影响,就像以下工作代码一样?
struct Outer
{
struct Inner
{
Inner(int n) : num(n) {}
int num;
} myinner;
Outer() : myinner(2) {}
};
Inner
是独立的类型,并且在它被实例化为Outer
内部时是不完整的吗? - CodeBricksInner
的声明不能推迟到Outer
看到Inner
在Outer
下面的定义之后再进行编译?这似乎在常规函数中是可行的。例如:void g(); void f(){g();} void(g){cout<<"hi\n";}
- CodeBricksOuter
中使用了Inner *myinner
,那么问题将永远不会发生,因为定义指针并不需要定义内部类。但是,指针运算++myinner
需要定义。规则太多啦 :P - Potatoswattertypedef
将它们链接起来”是什么意思?你是指这样做:struct Outer { /*...*/ typedef Inner itd; /*...*/}; struct Inner {/*...*/};
吗?如果是这样,那么为什么要这样做?如果你想让Inner
在Outer
之外不存在,那么这如何帮助Inner
在Outer
之外更或者更少地被访问?无论哪个类将其实例用作数据成员,对Inner
成员的可访问性不都取决于Inner
的访问修饰符吗?或者你并没有想在那里放置“嵌套”这个词吗?你只是在引用你上面的代码吗? - CodeBricks