2016-05-30 2 views
0

У меня возникли трудности с настройкой структуры с 3 классами. Я не уверен в объявлении include/forward.Объявление декларации в прямом выражении и глобальное пространство имен

Код ниже компилируется, пока я не добавлю пространство имен и перечисление в inclino.h. Я получаю "inclino не был объявлен" от InclinoMeasure.h

Inclino.h

// Inclino.h 
#include "InclinoMeasure.h" 
#include "InclinoReading.h" 

namespace inclino { 
enum a{a1, a2} 
} 

class Inclino 
{ 
    list<InclinoMeasure*> m_measures; 

    void f(inclino::a a); 
} 

InclinoMeasure.h

// InclinoMeasure.h 
#include "InclinoReading.h" 

class Inclino; 

class InclinoMeasure 
{ 
    Inclino *m_inclino; 
    list<InclinoReading*> m_readings; 

    void f(inclino::a a); 
} 

InclinoReading.h

// InclinoReading.h 

class Inclino; 
class InclinoMeasure; 

class InclinoReading 
{ 
    InclinoMeasure *m_inclino; 

    void f(inclino::a a); 
} 

ли структура верно ? Как я могу получить доступ к перечислению в классе других?

Заранее спасибо.

Редактировать: Я исправил проблему с пространством имен, поместив его в новый файл, включая 3 класса. Но, похоже, я неправильно использовал декларацию include/forward.

ответ

1

I receive "inclino has not been declared" from InclinoMeasure.h

Это происходит потому, что пространство имен inclino и перечисление a в настоящее время определены в Inclino.h, но InclinoMeasure.h не включает в себя Inclino.h (и не должны, учитывая текущее соотношение между заголовками, поскольку это было бы ввести циклическую зависимость). Передовая декларация class Inclino не имеет отношения к пространству имен и перечислению.

Для решения этой проблемы вы можете переместить определение пространства имен и перечисления на InclinoReading.h.

Это сделает его доступным во всех трех заголовках, где он используется, поскольку оба Inclino.h и InclinoMeasure.h включают InclinoReading.h.

+0

Спасибо, он работает для перечисления, но у меня есть «Недопустимое использование класса неполного типа Inclino» из InclinoMeasure.cpp (когда я вызываю метод Inclino). Я думаю, что речь идет о форвардной декларации. – Pierma

+0

Включили ли вы 'Inclino.h' в' InclinoMeasure.cpp'? Если нет, это может привести к ошибке: ошибка: недопустимое использование класса неполного типа Inclino''. Кроме того, вы должны убедиться, что у вас есть защитники заголовков в ваших файлах заголовков; в противном случае вы можете столкнуться с ошибкой: переопределение «класса InclinoMeasure» после включения 'Inclino.h' в' InclinoMeasure.cpp'. –

+0

Все выглядит нормально, если я включаю 2 файла + 2 декларацию вперед для каждого файла класса. Программа работает как ожидаемая, но является ли она хорошим кодом? (и да, у меня есть защитники). В очередной раз благодарим за помощь. – Pierma

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

  • Нет связанных вопросов^_^