прямое объявление с вектором типа класса - указатель на неполный тип класса недопустим

У меня есть два класса,foo а такжеbar.

foo.h#includes 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 позже. Какие-либо предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос