在第一次使用C++模板的时候,在头文件中声明了模板函数,然后在原文件中对模板函数进行了定义,最后在主函数中调用时,编译总是报错,苦恼很久,在海量资源下终于找到了蛛丝马迹。
文章转于:http://www.tuicool.com/articles/niuaey感谢感谢
swap函数模板的声明和定义代码如下:
//method.h
template<typename T> void swap(T& t1, T& t2);
#include "method.cpp"//<span style="color:#FF0000;">这里<span style="font-family:Microsoft YaHei;">就是关键,值得注意,与一般函数不同</span></span>
//method.cpp
<span style="font-family:Microsoft YaHei;">定义如下:</span>
template<typename T> void swap(T& t1, T& t2) {
T tmpT;
tmpT = t1;
t1 = t2;
t2 = tmpT;
}
上述是模板的声明和定义了,那模板如何实例化呢,模板的实例化是编译器做的事情,与程序员无关,那么上述模板如何使用呢,代码如下:
//main.cpp
#include <stdio.h>
#include "method.h"
int main() {
//模板方法
int num1 = 1, num2 = 2;
swap<int>(num1, num2);
printf("num1:%d, num2:%d\n", num1, num2);
return 0;
}
这里使用swap函数,必须包含swap的定义,否则编译会出错,这个和一般的函数使用不一样。所以必须在method.h文件的最后一行加入#include "method.cpp"。