Also ich ein Projekt erstellen, das Vektoren ineinander verschachtelt enthält, aber die Struktur wird nicht kompiliert. Ich denke, dies ist ein Fall von zirkulärer Abhängigkeit, aber alle Fixes, die ich gesehen habe, scheinen nur für Code zu gelten, der Header-Dateien und separate Übersetzungseinheiten enthält.Wie löst man eine zirkuläre Klassenabhängigkeit mit einer gemeinsamen Basisklasse ohne Header?
#include <iostream>
#include <vector>
class A {
public:
virtual ~A();
};
// The following forward declaration statements didn't solve the
// compiler error:
// class C;
// class C : public A;
class B : public A {
std::vector<A*> Avector;
public:
void addC(C* Cin){Avector.push_back(Cin);}
~B();
};
class C : public A {
std::vector<A*> Avector;
public:
void addB(B* Bin){Avector.push_back(Bin);}
~C();
};
int main() {
B b;
C c;
b.addC(&c);
c.addB(&b);
}
Ich habe versucht, nach vorn zu erklären mit
class C;
Class C : public A;
Aber nichts davon scheint zu funktionieren.
Der Fehler, den ich bekommen ist:
\test\test\source.cpp(15): error C2061: syntax error : identifier 'C'
\test\test\source.cpp(15): error C2065: 'Cin' : undeclared identifier
Ist diese Art von Code implementierbar?
Keine Notwendigkeit, die Definition in eine andere Kompilierungseinheit zu legen. Definition von 'B :: AddC' sollte nach' C' Definition sein. – Jarod42
@ Jarod42 Muss es dann inline markiert werden? –
Es scheint, dass der gesamte Code von OP in einer einzigen Übersetzungseinheit ist, also nein, es ist nicht erforderlich. Wenn der Code in der Header-Datei war, ja. – Jarod42