прямое объявление с вектором типа класса - указатель на неполный тип класса недопустим
У меня есть два класса,foo
а такжеbar
.
foo.h#include
s bar.h и содержитstd::vector
указателей наbar
объекты. В какой-то момент во время выполнения,bar
должен получить доступ к этому вектору указателей на другиеbar
объекты. Следовательно,foo
содержит метод с именемgetBarObjects()
который возвращает массив указателей.
Поэтому я жду декларацииfoo
в бар.ч. Я, очевидно, также должен заранее объявить метод, который я использую -foo::getBarObjects()
, Поскольку это возвращает массив указателей наbar
Я попал в порочный круг.
Я не могу переслать объявить Бар, а затем просто переслать объявитьgetBarObjects()
, так как это приводит к «неполное имя типа не допускается».
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
}
Если я просто включу наоборот, у меня точно такая же проблема вfoo
позже. Какие-либо предложения?