比如下面写的最简单的测试程序:
main.cpp:
#include <iostream>
#include "myself.h "
#include "Test.h "
using namespace std;
int main()
{
Base <int> ab;
cout < <ab.m_num;
return 0;
}
//------------------------------------------------------------------
Test.h:
#ifndef TEST_H
#define TEST_H
template <typename T>
class Base
{
public:
T m_num;
public:
Base();
Base(T i);
// virtual ~Base();
};
#endif
//------------------------------------------------------------------
Test.cpp:
#include "stdafx.h "
#include "Test.h "
template <typename T> Base <T> ::Base(){m_num = 0; }
template <typename T> Base <T> ::Base(T i){m_num = i;}
在主程序中包含头文件就出error LNK2001: 无法解析的外部符号 "public: __thiscall Base <int> ::Base <int> (void) " (??0?$Base@H@@QAE@XZ)错误,但是包含Test.cpp就没有任何问题。这一点奇怪的现象在同样的程序,不使用模版的时候不存在,使用模版的事就就只能包含源文件,请求答案,谢谢了
------解决方案--------------------------------------------------------
模版必须写在一个文件里
------解决方案--------------------------------------------------------
模板函数和一般的函数的区别是:
一般的函数只要写了.
编译时编译器就会生成它的机器码.
而模板则是只有当你调用该函数时,编译器会先生成相应的函数的C++代码,然后再编译成机器码.
这样可以避免生成过于臃肿的代码.
所以你如果把模板函数单独放在 cpp中而在这个cpp中并没有用到它.生成的obj里就不会有这些函数.
至于咋解决嘛....
自然是全写在头文件里咯.