我正在尝试使用专门的类成员函数。我在这里的一篇文章中找到了以下解决方案,但它不适用于我。
构建解决方案时,出现以下错误:
-TestClass.obj:错误LNK2005和致命错误LNK1169。
我的代码有什么问题?
template <class T1, class T2>
class TestClass
{
private:
VD cdata;
public:
TestClass(void){};
TestClass(VD & edata);
T1 fun1(const T2 ex);
~TestClass(void);
};
template <class T1, class T2>
T1 TestClass<T1, T2>::fun1(const T2 x)
{
T1 v1 = 100.0*pow(x[1] - x[0]*x[0],2) + pow(1 - x[0],2);
return v1;
}
template <>
double TestClass<double, column_vector>::fun1(const column_vector x)
{
double v1 = 100.0*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2);
return v1;
}
最佳答案
显式专门化(即完全专门化)的模板函数是用于ODR的普通函数。这意味着您必须在头文件中声明您的专长而不定义它
template <>
double TestClass<double, column_vector>::fun1(const column_vector x);
然后在某些
.cpp
文件中定义它template <>
double TestClass<double, column_vector>::fun1(const column_vector x)
{
double v1 = 100.0*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2);
return v1;
}
您将整个定义放入头文件中,这会产生多定义错误(LNK1169)。
至于LNK2005 ...,您必须提供更多信息。从您发布的内容尚不清楚,谁可能导致了LNK2005。 LNK2005提到了哪个功能?
关于c++ - 专业类成员功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17127124/