Я делаю игру, и мне назвали класс Man
и названный класс Block
в их коде им обоим нужен друг друг, но они находятся в отдельных файлах. Существует ли способ "предопределить" класс? Как @class макрос Objective C?
Это называется круговой зависимостью. В 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, поскольку было определено только имя, а не фактическое определение класса.
Да.
class Man;
Это объявит Man
как «неполный тип». Вы можете объявить указатели или ссылки на него и многое другое, но вы не можете создать экземпляр или получить доступ к его членам. Это не полное описание того, что можно и чего нельзя делать с неполным типом, но это общая идея.