Неполный тип. Перекрестные классы

277
05 февраля 2018, 05:31

Добрый вечер. Мне нужно из класса B получать доступ к методам класса A. Имеется вот такой код:

#include <vector>
class B;
class A
{
public:
    std::vector<B*> _b;
    void setup()
    {
        for (auto it = _b.begin(); it != _b.end(); it++)
        {
            (*it)->setPtr(this);
        }
    }
};
class B
{
public:
    A *_a = nullptr;
    void setPtr(A *a) { *_a = *a; }
};
int main()
{
    A a;
}

Компилятор выдает ошибки:

error C2027: использование неопределенного типа "B"
error C2227: выражение слева от "->setPtr" должно указывать на тип класса, структуры или объединения либо на универсальный тип

Как с таким бороться, если менять классы местами нельзя

Answer 1

Вынесите реализацию метода отдельно, после объявлений классов.

#include <vector>
class B;
class A
{
public:
    std::vector<B*> _b;
    void setup();
};
class B
{
public:
    A *_a = nullptr;
    void setPtr(A *a) { *_a = *a; }
};
void A::setup()
{
    for (auto it = _b.begin(); it != _b.end(); it++)
    {
        (*it)->setPtr(this);
    }
}

int main()
{
    A a;
}
READ ALSO
Prefix trie insert и многопоточность

Prefix trie insert и многопоточность

Я хочу попытаться получить счетчик слов на основе префикса trieНо у меня есть некоторые проблемы

185
Оператор delete в деструкторах

Оператор delete в деструкторах

Подскажите пожалуйста, я правильно понимаю, что этот оператор в деструкторе используется только применительно к атрибутам, являющимися...

206
c++ телефонный номер [требует правки]

c++ телефонный номер [требует правки]

Телефонный номер называют "шахматным", если его цифры набирают на кнопочной панели телефона ходом шахматного коня

218