C++: Два класса, нуждающиеся друг в друге

Я делаю игру, и мне назвали класс Man и названный класс Block в их коде им обоим нужен друг друг, но они находятся в отдельных файлах. Существует ли способ "предопределить" класс? Как @class макрос Objective C?

7
задан Johannes Jensen 6 July 2010 в 20:33
поделиться

2 ответа

Это называется круговой зависимостью. В class Two.h

class One;

class Two {
  public:
    One* oneRef;
};

И в class One.h

class Two;

class One {
  public:
    Two* twoRef;
};

Директивы "class One;" и "class Two;" присваивают классу имена "One" и "Two" соответственно; но они не определяют никаких других деталей, кроме имени. Поэтому вы можете создавать указатели на класс, но не можете включить в него весь класс, как, например:

class One;

class Two : public One {
};

class Three {
  public:
    One one;
};

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

5
ответ дан 6 December 2019 в 12:46
поделиться

Да.

class Man;

Это объявит Man как «неполный тип». Вы можете объявить указатели или ссылки на него и многое другое, но вы не можете создать экземпляр или получить доступ к его членам. Это не полное описание того, что можно и чего нельзя делать с неполным типом, но это общая идея.

11
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: