Шаблонный синтаксис определения метода класса - PullRequest
4 голосов
/ 19 ноября 2010

Определение класса:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> > class X {};

Я хочу определить метод класса вне блока кода класса. вот так:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> >
X<K, V, hashFunc, compFunc>::X() { }

g ++ v.4.4.3 возвращает

ошибка: аргумент по умолчанию для шаблона параметр для включения класса ‘X :: X ()’

Почему компилятор жалуется и как я могу заставить его работать?

Ответы [ 2 ]

5 голосов
/ 19 ноября 2010

Вы не объявили или не определили конструктор для X. Кроме того, вы повторили параметры шаблона по умолчанию в своем попытке определения X :: X.

Вот фиксированный код, main -шифрованный:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)=&_compFunc<K> > 
class X 
{ 
    X();
};

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&) >
X<K, V, hashFunc, compFunc>::X() { }

int main()
{
}
4 голосов
/ 19 ноября 2010

Не следует повторять параметр шаблона по умолчанию:

template<class K, class V,
         unsigned hashFunc(const K&),
         int compFunc(const K&,const K&)>
X<K, V, hashFunc, compFunc>::X() { /* ... */ }

Как указал Джон Диблинг, класс X должен также явно объявлять конструктор, но я предположил, что код был удален для ясности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...