declaração forward com vetor do tipo de classe - ponteiro para o tipo de classe incompleto não permitido
Eu tenho duas classes,foo
ebar
.
foo.h#include
s bar.h e contém umstd::vector
de ponteiros parabar
objetos. Em algum momento durante o tempo de execução,bar
precisa acessar esse vetor de ponteiros para outrosbar
objetos. Portanto,foo
contém um método chamadogetBarObjects()
que retorna a matriz de ponteiro
Portanto, declarofoo
em bar.h. Obviamente, também tenho que encaminhar declarar o método que estou usando -foo::getBarObjects()
. Como isso retorna a matriz de ponteiros parabar
, Eu entro em um ciclo vicios
Não consigo encaminhar declarar Bar e simplesmente encaminhar declarargetBarObjects()
, pois isso resulta em "nome de tipo incompleto não é 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
}
Se eu simplesmente incluir o contrário, terei o mesmo problema emfoo
mais tarde. Alguma sugestão