Я пытаюсь создать базовый шаблонный класс, параметр которого T должен быть структурой.
Когда я использую переменную, объявленную как имеющую тип T (как в классе шаблона, так и в классе, который расширяет его, определяя T ), GCC не может скомпилировать ее:
Ошибка GCC: недопустимое использование неполного
тип ‘struct x '
Несмотря на то, что он работает на VC, я понимаю, что он не работает, потому что не должен, потому что компилятор не знает в соответствии со стандартом типов, которые T представляют.
Есть ли способ сделать явным, что тип должен быть структурой?
То, что я делаю в коде, который работает в VC:
В базовом классе:
T* x
new T
sizeof(T)
В тех, кто его расширяет:
x->member
Редактировать: я пытался взять соответствующий код. Вот оно:
struct SomeStructureType
{
int memberA;
int memberB;
}
template <typename T> class Base
{
protected:
T* s;
void addMember(string name,void* offset);
Base()
{
s = new T;
}
};
class Extender : public Base<SomeStructureType>
{
public:
Extender()
{
addMember("memberA",&s->memberA);
}
}