Что означает «использование шаблона класса требует списка аргументов шаблона»? - PullRequest
7 голосов
/ 24 июня 2011

Я новичок в шаблонах, поэтому прошу прощения за наивные вопросы. Я получаю ошибки в этом коде:

template <class t>
class a{
public:
    int i;
    a(t& ii):i(ii){}
};


int main()
{
    a *a1(new a(3));
    cout<<a1.i;

    _getch();
}

Ошибки компиляции:

  1. 'a' : use of class template requires template argument list
  2. 'a' : class has no constructors

Ответы [ 2 ]

10 голосов
/ 24 июня 2011

Использовать

a<int> *a1(new a<int>(3));
 ^^^^^          ^^^^ 

Если вы хотите, чтобы ваш параметр шаблона автоматически выводился, вы можете использовать вспомогательную функцию:

template<class T>
a<T> * createA (const T& arg) //please add const to your ctor, too.
{
    return new a<T>(arg)
}
6 голосов
/ 24 июня 2011
a(t& ii):i(ii){}

Это должно быть:

a(const t& ii):i(ii){}

Чтобы вы могли передавать константные литералы и временные значения в конструктор.

А затем сделайте это:

a<int> *a1(new a<int>(3));

Вы также можете написать:

a<int> a2(3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...