c – 为什么前向声明不适用于类?
发布时间:2020-12-16 10:27:25 所属栏目:百科 来源:网络整理
导读:int main() { B bb; //does not compile (neither does class B bb;) C cc; //does not compile struct t tt; //compiles class B {}; //HERE is the class B defination struct s { struct t * pt; }; //compiles struct t { struct s * ps; }; return 0;}c
int main() { B bb; //does not compile (neither does class B bb;) C cc; //does not compile struct t tt; //compiles class B {}; //HERE is the class B defination struct s { struct t * pt; }; //compiles struct t { struct s * ps; }; return 0; } class C {}; 我刚刚修改了给出here的例子. 为什么结构转发声明有效,而不是类前向声明??? 它是否与命名空间有关 – 标记命名空间和typedef命名空间?我知道没有typedef的结构定义会转到标记命名空间. 结构只是包含所有公共成员的类.所以,我希望他们的行为类似. 解决方法
前向声明适用于类,但其他时候你已经预期.
首先,你必须写B班;在你的主程序的代码之前. 然后你必须写B * bb;而不是B bb;.只能在类定义之后构造B类型的对象. 此行为的原因如下:编译器不知道它必须在堆栈上为B类实例分配多少字节,因为此信息取决于类的定义(当时您没有给出).然而,可以在B的前向声明之后构造指向类B的实例的指针,因为指针的大小是先前已知的(并且对于所有指针类型通常是相同的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |