Dev - C++ - Declarar un tipo de dato <Nodo> dentro de esa misma clase <Nodo>

 
Vista:

Declarar un tipo de dato <Nodo> dentro de esa misma clase <Nodo>

Publicado por Valentin Quintero (1 intervención) el 09/06/2016 05:30:12
Hola, estoy implementando un grafo en c++ y debido a mis pocos conocimientos sobre clases y objetos en este lenguaje me he quedado estancado en algo que pueda que sea muy simple, pero que me ha dado bastantes problemas. Mi clase se llama Nodo, y lo que quiero hacer es declarar un tipo de dato Nodo dentro de esta clase.
Este es el código del archivo .h
El error que me sale: El campo nAntecesor tiene un tipo incompleto "Nodo" (Linea 17)
La verdad solo sé lo basico en c++, me estoy guiando de un código hecho en java y al parecer allí no da ningun error. Quisiera saber si es posible hacer esto en c++ (Supongo que si, pero ya he buscado y no doy con la respuesta).
Agradezco cualquier ayuda que me brinden. Muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Nodo {
public:
    Nodo();
    Nodo(int dato);
    int getDato();
    void setNAntecesor(Nodo nAntecesor);
    Nodo getNAntecesor();
    void setPesoAcum(int pesoAcum);
    int getPesoAcum();
    void setMarca(bool marca);
    bool getMarca();
    void setVisitado(bool visitado);
    bool isVisitado();
 
private:
    int dato;
    Nodo nAntecesor;
    int pesoAcum;
    bool marca;
    bool visitado = false;
};
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Declarar un tipo de dato <Nodo> dentro de esa misma clase <Nodo>

Publicado por Capitan Kirk (48 intervenciones) el 09/06/2016 08:57:07
No estoy muy ducho en C++, pero el problema parece que está en que, en esa línea, estás creando un elemento de tipo Nodo que no te puede crear porque Nodo no está definido todavía (por ejemplo, no se conoce su tamaño todavía). El modo de hacerlo es creando un puntero a Nodo, ya que un puntero sí es de tamaño conocido independientemente del tipo al que vaya a apuntar:

1
2
3
4
5
6
7
8
private:
    int dato;
 
    Nodo *pAntecesor;
 
    int pesoAcum;
    bool marca;
    bool visitado = false;

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar