2010-07-06 4 views
7

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

+2

Звучит так, как вы хотите, это объявление вперед. – mooware

+0

+1 для BlockDude. –

ответ

5

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

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

А в классе One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

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

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

Причина два примера выше, не будет компилироваться, потому что в то время как компилятор знает, что есть один класс, это Безразлично» t знать, какие поля, методы или виртуальные методы, класс Один может содержать, потому что было определено только имя, а не фактическое определение класса.

11

Да.

class Man; 

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

+1

Важно отметить, что вы можете продолжить и включить полный тип позже и получить доступ. Вы можете использовать неполные типы в заголовке, а затем включить полное определение заголовка в cpp, чтобы использовать его. –

Смежные вопросы