c ++模板代码段中的错误

时间:2012-02-21 06:49:25

标签: c++ oop templates

我写了以下代码:

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.

如何消除错误?

2 个答案:

答案 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;
    } 
};