0

我正在尝试使用专门的类成员函数。我在这里的一篇文章中找到了以下解决方案,但它不适用于我。当我构建解决方案时,我收到以下错误: - 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;
 }
4

1 回答 1

1

显式特化(即完全特化)模板函数是用于 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提到了哪个功能?

于 2013-06-15T19:42:10.430 回答