读书人

模板能把声明和定义分开吗,该如何解决

发布时间: 2012-03-18 13:55:39 作者: rapoo

模板能把声明和定义分开吗
我下面这个怎么修改啊,我是VC2008

C/C++ code
// ShengMing.h#include<iostream>using namespace std;template <typename T>T sum (T,T);



C/C++ code
// DingYi.cpp#include"ShengMing.h"template<typename T>T sum(T a,T b){    return a+b;}


C/C++ code
//  x.cpp#include<iostream>using namespace std;#include<windows.h>#include<locale.h>#include "ShengMing.h"void main(){    cout<<  sum<int>(100, 23);}1>------ 已启动生成: 项目: main, 配置: Debug Win32 ------1>正在编译...1>DingYi.cpp1>正在生成代码...1>正在编译...1>x.cpp1>正在生成代码...1>正在链接...1>LINK : warning LNK4199: 已忽略 /DELAYLOAD:OleAcc.dll;未找到来自 OleAcc.dll 的导入1>x.obj : error LNK2019: 无法解析的外部符号 "int __cdecl sum<int>(int,int)" (??$sum@H@@YAHHH@Z),该符号在函数 _main 中被引用1>C:\Users\Administrator\Desktop\main\Debug\main.exe : fatal error LNK1120: 1 个无法解析的外部命令1>生成日志保存在“file://c:\Users\Administrator\Desktop\main\main\Debug\BuildLog.htm”1>main - 2 个错误,1 个警告========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


[解决办法]
要放到一起的
[解决办法]
.h 把模板的声明和定义都写一起
[解决办法]
模板的东西最好还是放在同一个文件里安全且特化版本加上inline:你的头文件可能被重复包含,所以不同的编译单元就多次编译了函数,于是在连接的时候就发现重定义的符号了。

[解决办法]
调用的时候直接sum(100, 23)就好了,系统会自动识别
这是函数模板不是类模板

读书人网 >C++

热点推荐