And*_*one 3 c++ oop scope g++ class
我有一种情况,其中A引用了B中定义的C类,C有B类的实例.
当我尝试编译下面的代码时,我得到" field a has incomplete type".我假设这是因为编译器不知道应该为A的实例分配多少内存.
class A;
class B {
public:
class C {
A a;
};
};
class A {
A(const B::C& _c)
: c(_c)
{}
const B::C& c;
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,我得到" C in class B does not name a type":
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;
};
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能说服编译器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!
};
Run Code Online (Sandbox Code Playgroud)
这很可能是非法的,但我认为值得一试.如果它不起作用,那么我没有看到任何解决问题的方法.