相互引用类产生"不完整类型"错误

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是真正的类型?

j_r*_*ker 5

绝对猜测,我注意到你没有尝试过一种排列:

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)

这很可能是非法的,但我认为值得一试.如果它不起作用,那么我没有看到任何解决问题的方法.