i membri della classe C ++
Domanda
Sono venuto da Java a C ++ ...
Quando provo a fare questo ...
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
il compilatore mi dicono che Tabella non è definito. Se posso passare definizioni di classe il compilatore mi dicono che di sicurezza non è definita ??p>
In Java ero in grado di fare qualcosa di simile senza alcun problema. C'è una soluzione per questo al lavoro? grazie ...
Soluzione
Hai una dipendenza circolare qui e necessità di inoltrare a dichiarare una delle classi:
// forward declaration
class Box;
class Table
{
Box* boxOnit;
} // eo class Table
class Box
{
Table* onTable
} // eo class Box
Si noti che, in generale, avremmo un file di intestazione separato per Box
e Table
, utilizzando le dichiarazioni a termine in entrambi, per esempio:
box.h
class Table;
class Box
{
Table* table;
}; // eo class Box
table.h
class Box;
class Table
{
Box* box;
}; // eo class Table
Quindi, includere il file necessario nella nostra implementazione file (cpp):
box.cpp
#include "box.h"
#include "table.h"
table.cpp
#include "box.h"
#include "table.h"
Altri suggerimenti
dichiarazioni previsionali . a citare questa come prima dichiarazione:
class Table; // Here is the forward declaration
Aggiungi questo prima classe Box:
class Table;
In questo modo si dichiarare avanti classe tabella in modo che puntatore ad esso può essere utilizzato in sicurezza.
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
Utilizzare le dichiarazioni previsionali in modo che la classe dichiarata prima conosce la seconda. http://www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm
Si dovrebbe inoltrare dichiarare uno dei due classi:
class Table; // forward declare Table so that Box can use it.
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
o viceversa:
class Box; // forward declare Box so that Table can use it.
class Table {
Box* boxOnIt;
};
class Box {
Table* onTable;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
Aggiungi classe definizione sulla parte superiore
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};