класс — C ++ Создание «оболочки»

Обновление ниже

Я пытаюсь создать эту обертку, чтобы содержать указатели на все другие классы. Я столкнулся с этой проблемой (пример):

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 *»

3

Решение

просто объявите структуру переноса, как показано ниже:

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();
}
7

Другие решения


По вопросам рекламы [email protected]