班级定义:
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()'
的类的参数
为什么编译器会抱怨,我该怎样才能使它工作?
答案 0 :(得分: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()
{
}
答案 1 :(得分:4)
您不应重复默认模板参数:
template<class K, class V,
unsigned hashFunc(const K&),
int compFunc(const K&,const K&)>
X<K, V, hashFunc, compFunc>::X() { /* ... */ }
正如John Dibling所指出的那样,X类显然也必须声明构造函数,但我认为代码是为了清晰起见而删除的。