У меня возникли трудности с настройкой структуры с 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.
Спасибо, он работает для перечисления, но у меня есть «Недопустимое использование класса неполного типа Inclino» из InclinoMeasure.cpp (когда я вызываю метод Inclino). Я думаю, что речь идет о форвардной декларации. – Pierma
Включили ли вы 'Inclino.h' в' InclinoMeasure.cpp'? Если нет, это может привести к ошибке: ошибка: недопустимое использование класса неполного типа Inclino''. Кроме того, вы должны убедиться, что у вас есть защитники заголовков в ваших файлах заголовков; в противном случае вы можете столкнуться с ошибкой: переопределение «класса InclinoMeasure» после включения 'Inclino.h' в' InclinoMeasure.cpp'. –
Все выглядит нормально, если я включаю 2 файла + 2 декларацию вперед для каждого файла класса. Программа работает как ожидаемая, но является ли она хорошим кодом? (и да, у меня есть защитники). В очередной раз благодарим за помощь. – Pierma