Я хочу создать очень общий чистый виртуальный класс i_BIS_Data, который будет наследоваться уникальными классами BIS_Data.Перегрузка структур в C++
class i_BIS_Data
{
public:
i_BIS_Data(void) { }
virtual ~i_BIS_Data(void) { }
virtual void setData(bis_data data) = 0;
};
Я хочу, чтобы все мои дети i_BIS_Data определить bis_data-структуру, как и все они будут разными. Я ожидаю, что мой ребенок класс выглядеть примерно следующим образом:
class BIS_0192_Aircraft_ID_Data : i_BIS_Data
{
public:
struct bis_data
{
UInt16 acid;
UInt16 parity;
};
void setData(bis_data data){ m_data.parity = data.parity;
m_data.acid = data.acid; }
}
Когда я пытаюсь скомпилировать класс, который использует BIS_0192_Aircraft_ID_Data, я получаю следующее сообщение об ошибке: Ошибка C2061: синтаксическая ошибка: идентификатор «bis_data». Я верю в это, потому что я не определил bis_data в родительском классе.
Так можно ли «перегрузить» структуру и разрешить нескольким классам детей определять, что такое bis_data?
+1. Вы избили меня на 16 секунд с помощью шаблона. Эта последняя проблема (не общие базовые классы) может быть исправлена путем создания класса шаблона из некоторого класса без шаблона. –
Это не позволяет ему использовать i_BIS_Data * для ссылки на любой из подтипов, поскольку изначально проблема заключалась в том, что все подтипы имели определение структуры дифференциала. Решение Дэвида, вероятно, так же хорошо, как и будет. –
@WayneTanner: они НЕ являются подтипами, потому что они нарушают LSP. –