模板类方法定义语法

时间:2010-11-19 17:25:52

标签: c++ templates

班级定义:

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 个答案:

答案 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类显然也必须声明构造函数,但我认为代码是为了清晰起见而删除的。