PDA

View Full Version : [C++]Porting classe da Java


Dezseven
03-03-2010, 18:37
Salve a tutti!
Ho la dichiarazione della seguente classe java

public class Node{
private static int cubeSide;
private int id;
private Node father;
private Node[] sons = new Node[8];
.........

Quando vado a fare il porting in C++, mi dice nel seguente modo

class Node{
private:
static int cubeSide;
int id;
Node father;
Node *sons;
int posInArray;

mi ritorna un errore alla riga : Node father; dicendomi che:

error C2460: 'Node::father' : uses 'Node', which is being defined

come se non fosse possibile in C++ dichiarare un attributo di tipo oggetto come quello della classe.
Come so può risolvere tale inconveniente?
Grazie!

tomminno
04-03-2010, 07:48
come se non fosse possibile in C++ dichiarare un attributo di tipo oggetto come quello della classe.


Infatti non è possibile, stai definendo una classe ricorsivamente.


Come so può risolvere tale inconveniente?
Grazie!

Dovresti usare un puntatore.

Dezseven
04-03-2010, 10:36
Dovresti usare un puntatore.

Infatti lo pensavo; il "Node father" della classe Java l'ho ridefinito in C++ come

Node *father;

mentre il "Node[] sons" della classe Java l'ho ridefinito in C++ come

Node **sons;


E' corretto?

Grazie!!!

tomminno
04-03-2010, 11:47
Infatti lo pensavo; il "Node father" della classe Java l'ho ridefinito in C++ come

Node *father;

mentre il "Node[] sons" della classe Java l'ho ridefinito in C++ come

Node **sons;


E' corretto?

Grazie!!!

Diciamo che i puntatori fanno molto C style ;)
Non so che IDE utilizzi ma ci sono diverse alternative:
1)per gli array puoi usare vector, dove nel costruttore preallochi lo spazio necessario.
2)se hai a disposizione il namespace tr1 puoi usare std::tr1::array
3)sempre in tr1 puoi usare std::tr1::shared_ptr al posto del puntatore così ti dimentichi della delete, nel tuo caso se hai possibili riferimenti circolari dovresti stare attendo ad usare anche std::tr1::weak_ptr