eclaración @forward con vector de tipo de clase: no se permite el puntero al tipo de clase incompleto

Tengo dos clases,foo ybar.

foo.h#includes bar.h y contiene unastd::vector de punteros abar objetos. En algún momento durante el tiempo de ejecución,bar tiene que acceder a este vector de punteros a otrosbar objetos. Por lo tanto,foo contiene un método llamadogetBarObjects() que devuelve la matriz de punteros.

Por lo tanto, reenvío declarofoo en bar.h. Obviamente, también tengo que reenviar la declaración del método que estoy usando -foo::getBarObjects(). Como esto devuelve la matriz de punteros abar, Entro en un círculo vicioso.

No puedo reenviar declarar Bar y luego simplemente reenviar declarargetBarObjects(), ya que esto da como resultado "el nombre de tipo incompleto no está 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 incluyo al revés, tendré el mismo problema enfoo mas tarde. ¿Alguna sugerencia

Respuestas a la pregunta(3)

Su respuesta a la pregunta