C ++: два класса нуждаются друг в друге - PullRequest
7 голосов
/ 07 июля 2010

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

Ответы [ 2 ]

11 голосов
/ 07 июля 2010

Да.

class Man;

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

5 голосов
/ 07 июля 2010

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

class One;

class Two {
  public:
    One* oneRef;
};

И в классе One.h

class Two;

class One {
  public:
    Two* twoRef;
};

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

class One;

class Two : public One {
};

class Three {
  public:
    One one;
};

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...