c – 相互引用类产生“不完整类型”错误
发布时间:2020-12-16 09:30:27 所属栏目:百科 来源:网络整理
导读:我有一种情况,其中A引用了B中定义的C类,C有B类的实例. 当我尝试编译下面的代码时,我得到“字段a具有不完整类型”.我假设这是因为编译器不知道应该为A的实例分配多少内存. class A;class B {public: class C { A a; };};class A { A(const B::C _c) : c(_c) {
我有一种情况,其中A引用了B中定义的C类,C有B类的实例.
当我尝试编译下面的代码时,我得到“字段a具有不完整类型”.我假设这是因为编译器不知道应该为A的实例分配多少内存. class A; class B { public: class C { A a; }; }; class A { A(const B::C& _c) : c(_c) {} const B::C& c; }; 但是当我尝试编译它时,我得到“B类中的C没有命名类型”: class B; class B::C; class A { A(const B::C& _c) : c(_c) {} const B::C& c; }; class B { public: class C { A a; }; }; 如何说服编译器B :: C是真实类型? 解决方法
绝对猜测,我注意到你没有尝试过一种排列:
class B { public: class C; // Forward declaration }; class A { A(const B::C& _c) : c(_c) {} const B::C& c; }; class B::C { A a; C() : a(*this) {} // Thanks Nim for pointing this out! }; 这很可能是非法的,但我认为值得一试.如果它不起作用,那么我没有看到任何解决问题的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |