У меня есть ситуация, в которой А имеет ссылку на класс C, определенных внутри В, и С имеет экземпляр класс В.взаимно ссылочные классы дают ошибку «неполный типа»
При попытке компиляции коды ниже, я получаю «field a has incomplete type
». Я предполагаю, что это потому, что компилятор не знает, сколько памяти следует выделить для экземпляра А.
class A;
class B {
public:
class C {
A a;
};
};
class A {
A(const B::C& _c)
: c(_c)
{}
const B::C& c;
};
Но когда я пытаюсь скомпилировать это я получаю «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;
};
};
Как я могу убедить компилятор, что B::C
является реальным типом?
Кажется законным. – UncleBens
Я не считаю, что это скомпилируется, конструктор по умолчанию для A не инициализирует ссылку на C. Однако для того, чтобы заставить выше работать, все, что вам нужно, это конструктор для C, чтобы инициализировать A с самим собой, - но у вас есть два разных экземпляра A, возможно, это именно то, что вам нужно? (@j_random_hacker, извини, если вы это подразумевали в своем ответе!) – Nim
@Nim: Хорошая точка. Кто-нибудь пытался скомпилировать это? Я (лениво) не ... –