Quindi sto creando un progetto che comporta l'annidamento di vettori l'uno dentro l'altro, ma la struttura non verrà compilata. Penso che questo sia un caso di dipendenza circolare, ma tutte le correzioni che ho visto sembrano riguardare solo il codice che coinvolge file di intestazione e unità di traduzione separate.Come risolvere una dipendenza circolare della classe con una classe base condivisa senza intestazioni?
#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);
}
Ho provato in avanti dichiarando con
class C;
Class C : public A;
Ma niente di tutto ciò sembra funzionare.
L'errore che ottengo è:
\test\test\source.cpp(15): error C2061: syntax error : identifier 'C'
\test\test\source.cpp(15): error C2065: 'Cin' : undeclared identifier
È questo il tipo di codice attuabile?
Non è necessario inserire la definizione in un'altra unità di compilazione. la definizione di 'B :: AddC' dovrebbe essere dopo la definizione di' C'. – Jarod42
@ Jarod42 Deve essere contrassegnato come "in linea", quindi? –
Sembra che tutto il codice dell'OP si trovi in una singola unità di traduzione, quindi no, non è richiesto. Se il codice era nel file di intestazione, sì. – Jarod42