структура круговой зависимости - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть две структуры:

struct B;
struct A {
    B *b;
    void Func() {
        std::cout << b->x << std::endl;
    }
};
struct B {
    A a;
    float x;
    void Func() {
        a.Func();
    }
};

Когда я пытаюсь скомпилировать это, я получаю следующие ошибки:

Error C2027 use of undefined type 'B'
Error C2227 left of '->x' must point to class/struct/union/generic type

Как это исправить?

1 Ответ

3 голосов
/ 19 апреля 2020

Это можно исправить, переместив определение Func за пределы объявления класса в точку, где B полностью определено, например:

struct B;
struct A {
    B *b;
    // Only declare Func, do not provide definition
    void Func();
};
struct B {
    A a;
    float x;
    void Func() {
        a.Func();
    }
};

// Define Func where the full definition of B is available
void A::Func() {
    std::cout << b->x << std::endl;
}
...