Ошибка в шаблоне С ++ - PullRequest
       2

Ошибка в шаблоне С ++

0 голосов
/ 21 февраля 2012

Я написал следующий код:

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 ]

5 голосов
/ 21 февраля 2012
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 ++, если вы хотите общее имя для базового класса «the», вам нужно typedef.Например, в классе Reg вы можете typedef Object Base;.

Конструкция : val( initval ) представляет собой список инициализатора конструктора , где по существу вы вызываете конструкторы членов и базовых классов, избегая использования по умолчанию.Конструкция.

Наконец, const&, , передаваемый по ссылке , позволяет избежать трудоемкого и занимающего память копирования фактического аргумента;это еще одна вещь, отличная в C ++ (по сравнению с Java, который, я предполагаю, вы пришли).

2 голосов
/ 21 февраля 2012
class Object
{
   public:
   Object()
   {}
};

template <class T>
class Reg : public Object
{
    T val,val_new;
    public:
    Reg(T initval) : Object() // initializer list
    {
    val=initval;
    } 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...