错误lnk 2019与构造函数

时间:2011-09-09 08:55:35

标签: c++

  

可能重复:
  C++ templates, undefined reference

我遇到模板构造函数的问题。我想在没有模板类的构造函数中使用模板,如下所示:

test.h

class test {
   public:

   template <class T>
   test(T* obj);
};

TEST.CPP

template <class T>
test::test(T* obj) {
   /* ... */
}

的main.cpp

int main() {
   int    y = 5;
   test*  o = new test(yy);
   delete o;
}

当我尝试在MSVS中构建它时,我收到错误lnk2019(“未解析的外部符号”)。

我发现解决方案是在头文件中定义构造函数,如下所示:

test.h

class test {
   public:

   template <class T>
   test(T* obj) { /* some code here */ }; 
};

或者像这样:

test.h

class test {
   public:

   template <class T>
   test(T* obj);
};

template <class T>
test::test(T* obj) {
  /* some code here */
}

是否有在单独的.cpp文件中编写模板函数的方法?或者我必须在头文件中定义它吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,如果你想在模板中使用模板函数(在你的例子中是test.cpp),那么你必须定义函数并在头文件中声明它。