Tengo dos clases, foo y barra. foo incluye barra y contiene un std :: vector de punteros para barrar objetos. En algún punto durante el tiempo de ejecución, la barra tiene que acceder a este vector de punteros a otros objetos de la barra. Por lo tanto, foo contiene un método llamado getBarObjects() que devuelve la matriz de punteros.declaración directa con el vector del tipo de clase - puntero al tipo de clase incompleto no permitido
Por lo tanto, reenvio declarar foo en la barra. Obvioulsy también tengo que reenviar declarar el método que estoy usando - foo :: getBarObjects(). Como esto devuelve la matriz de punteros a la barra, me meto en un círculo vicioso.
No puedo reenviar incluir barra y luego simplemente reenviar incluir getBarObjects(), ya que esto da como resultado "nombre de tipo incompleto no permitido".
foo.h:
#include "bar.h"
#include <vector>
class foo {
public:
foo();
~foo();
std::vector<bar*> getBarObjects();
private:
std::vector<bar*> barObjects;
}
bar.h:
class foo;
std::vector<bar*> foo::getBarObjects(); // error, doesn't know bar at this point
class bar {
public:
bar(foo *currentFoo);
~bar();
bool dosth();
private:
foo *thisFoo;
}
bar.cpp:
#include "bar.h"
bool bar(foo *currentFoo) {
thisFoo = currentFoo;
}
bool bar::dosth() {
thisFoo->getBarObjects(); // error, pointer to inomplete class type is not allowed
}
Si simplemente me incluyo al revés, voy a tener el mismo problema en foo lateron. ¿Alguna sugerencia?
Meh, solución simple a un problema que parecía grande. ¡Gracias! – Aerius