我写了以下代码:
class Object
{
public:
Object()
{}
};
template <class T>
class Reg : public Object
{
T val,val_new;
public:
Reg(T initval)
{
super( );
val=initval;
}
};
代码中的错误是
t.cpp: In constructor 'Reg<T>::Reg(T)':
Line 15: error: there are no arguments to 'super' that depend on a template parameter,
so a declaration of 'super' must be available
compilation terminated due to -Wfatal-errors.
如何消除错误?
答案 0 :(得分:5)
class Object
{
public:
Object() {}
};
template <class T>
class Reg : public Object
{
T val,val_new;
public:
Reg(T const& initval)
: val( initval )
{}
};
标准C ++中没有super
。有些编译器将它作为语言扩展提供,但是如果你想要“基类”的通用名称,那么在标准C ++中,你必须typedef
它。例如,在课程Reg
中,您可以typedef Object Base;
。
构造: val( initval )
是一个构造函数初始化列表,基本上你可以调用成员和基类的构造函数,避免默认构造。
最后,const&
,通过引用传递,避免了耗费时间和内存消耗的实际参数复制;这是C ++中另一个不同的东西(与Java相比,我假设你来自它)。
答案 1 :(得分:2)
class Object
{
public:
Object()
{}
};
template <class T>
class Reg : public Object
{
T val,val_new;
public:
Reg(T initval) : Object() // initializer list
{
val=initval;
}
};