Обновление ниже
Я пытаюсь создать эту обертку, чтобы содержать указатели на все другие классы. Я столкнулся с этой проблемой (пример):
main.cpp
struct wrap {
Game* game;
Player* player;
Map* map;
};
game.h
class Game {
private:
wrap* info;
}
Есть ли способ обойти это, для обертки нужна игра, а для игры нужна обертка (Я знаю, что класс-обертка [это case struct] не лучшая практика, но мне часто нужна эта информация в других классах.)
Обновить
Теперь у меня новая проблема.
items.h
// top
struct CoreInfo;void Items::test() {
struct CoreInfo* b;
//b->testing = 4;
}
(структура CoreInfo содержит переменную «int testing.», и я не могу понять, как получить доступ к чему-либо внутри класса элементов, обычная ошибка: 7 запрос на членство ‘testing’ в ‘b’, который имеет тип не-класса ‘CoreInfo *»
просто объявите структуру переноса, как показано ниже:
main.cpp
#include "game.h"
struct wrap {
Game* game;
Player* player;
Map* map;
};
game.h
struct wrap;
class Game {
private:
struct wrap* info;
}
редактировать:
проблема в том, что вы не делали различие между декларация а также определение используя преимущества модулей компиляции. если ты определять ваш класс и его члены в модуле компиляции (items.cpp
), в то время как декларирование это в шапке items.h
, у вас не будет проблем.
Давайте сделаем пример, чтобы проиллюстрировать это:
foo.h
#include "bar.h"
class A {
B b_instance;
void do_something(int i, int j);
}
foo.cpp
#include "foo.h"
int A::do_something(int i, int j) {
return i+j;
}
bar.h
class B {
A a_instance;
void use_a();
}
bar.cpp
#include "foo.h" // which includes bar.h as well
void B::use_a() {
int k = a_instance.do_something();
}