2016-03-16 6 views
0

Мой предыдущий вопрос был задан неправильно, поэтому я отправлю его исправление.
У меня есть этот пример метания
expected class-name before ‘{’ token
ошибка при компиляции. Я понимаю, почему это терпит неудачу, но я не знаю, как это исправить. Спасибо.
BaseClass.hНаследование класса C++ «ожидаемое имя класса»

#ifndef INHERITTEST_BASECLASS_H 
#define INHERITTEST_BASECLASS_H 

#include "ElementClass.h" 

class ElementClass; 

class BaseClass 
{ 

private: 
    ElementClass *m_someField; 
}; 


#endif 


ElementClass.h

#ifndef INHERITTEST_ELEMENTCLASS_H 
#define INHERITTEST_ELEMENTCLASS_H 

#include "ChildClass.h" 

class ChildClass; 

class ElementClass 
{ 
private: 
    ChildClass *m_class; 
}; 


#endif 


ChildClass.h

#ifndef INHERITTEST_CHILDCLASS_H 
#define INHERITTEST_CHILDCLASS_H 

#include "BaseClass.h" 

class ChildClass : public BaseClass 
{ 

}; 


#endif 

ответ

2

У вас есть файлы, зависящие от обращения .h.

В BaseClass.h:

#ifndef INHERITTEST_BASECLASS_H 
#define INHERITTEST_BASECLASS_H 

#include "ElementClass.h" // Includes ElementClass.h 

В ElementClass.h:

#ifndef INHERITTEST_ELEMENTCLASS_H 
#define INHERITTEST_ELEMENTCLASS_H 

#include "ChildClass.h" // Which included BaseClass.h 

Можно удалить эти #include линии, так как вы используете эти классы только указателей и опережающее объявление является достаточным для это цель.

+0

Но что, если я использую эти объекты в этом указателе внутри класса? – Megaxela

+0

Тогда вам нужны файлы .h. Если вы реализуете функции, которым нужен доступ к объектам, на которые указывают эти указатели в файле .cc, тогда нет никаких проблем. –

+0

Ничего себе, спасибо. Все это время я действительно думал, что мне нужно использовать '# include' только в файле' .h'. – Megaxela

0

Когда вы работаете с наследованием следующие

#include "ChildClass.h" 
class ChildClass; 

не является необходимым, если вы собираетесь разбить их в sepperate исходные файлы (которые он выглядит, как вы), вы можете сказать,

#include "ElementClass.h" 

в исходном файле вашего производного класса

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