2010-11-19 2 views
4
определение

Класс:Templated определение метода класса синтаксис

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() { } 

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

error: default argument for template parameter for class enclosing ‘X::X()’

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

ответ

5

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

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

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

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

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

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

Смежные вопросы