这是头文件test.h里的代码:
template <class T>
class test
{
private:
T a,b;
public:
test();
test(T a,T b);
void output();
};
这是源文件test.cpp里的代码:
#include “test.h”
#include <iostream>
using namespace std;
template <class T>
test<T>::test()
{
a=0;
b=0;
}
template <class T>
test<T>::test(T aa,T bb)
{
a=aa;
b=bb;
}
template <class T>
void test<T>::output()
{
cout<<“a=”<<a<<endl;
cout<<“b=”<<b<<endl;
}
主函数main.cpp里的代码:
#include <iostream>
#include “test.h”
using namespace std;
void main()
{
int a,b;
cin>>a>>b;
test<int> tt(a,b);
tt.output();
}
编译错误如下:
1> test.cpp
1>main.obj : error LNK2019: 无法解析的外部符号 “public: __thiscall test<int>::test<int>(int,int)” (??0?$test@H@@QAE@HH@Z),该符号在函数 _main 中被引用:
template <class T>
class test
{
private:
T a,b;
public:
test();
test(T a,T b);
void output();
};
这是源文件test.cpp里的代码:
#include “test.h”
#include <iostream>
using namespace std;
template <class T>
test<T>::test()
{
a=0;
b=0;
}
template <class T>
test<T>::test(T aa,T bb)
{
a=aa;
b=bb;
}
template <class T>
void test<T>::output()
{
cout<<“a=”<<a<<endl;
cout<<“b=”<<b<<endl;
}
主函数main.cpp里的代码:
#include <iostream>
#include “test.h”
using namespace std;
void main()
{
int a,b;
cin>>a>>b;
test<int> tt(a,b);
tt.output();
}
编译错误如下:
1> test.cpp
1>main.obj : error LNK2019: 无法解析的外部符号 “public: __thiscall test<int>::test<int>(int,int)” (??0?$test@H@@QAE@HH@Z),该符号在函数 _main 中被引用:
C++要求模板的声明和实现对引用者必须都可见,模板的声明和实现要放到一个文件里,都写在.h文件里
卸载退文件里
5
写模板要把声明和实现全部在“.h”中实现,否则就会报错,刚开始学时本人也遇上过这种情况!:)