Punteros cruzados de C++ en encabezados

Tengo dos clases simples, muy simple Una es como una tabla maestra y contiene una lista de punteros a la clase Dos, y la clase Dos contiene un puntero a la clase Uno. En cada clase hay una función que llama a métodos sobre punteros, pero recibo un error como error C2027: uso de tipo indefinido

---- class One.h"
#include "Two.h"

class One {
public:
list<Two*> something;
void t(){pointer on Two call methods}
};

y

---------class Two.h 
 class One;
class Two {
public:
One* something;
void t(){pointer on One call methods}
};

Cómo resolver este problema ?

preguntado el 27 de julio de 12 a las 14:07

1 Respuestas

Mueve la definición de tu método a .cpp e incluya el encabezado requerido con la definición de tipo.

Two.h
class One;
class Two {
public:
    One* something;
    void t();
};

Two.cpp:
void Two::t() {...}

Esto es necesario porque el compilador no puede generar el código para llamar a un método de un tipo indefinido

Respondido 27 Jul 12, 14:07

Por lo tanto, también puede evitar incluir Two.h en One.h reemplazándolo con class Two;. - Negro

@Black: Sí, esto acelerará la compilación. Andrés

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.