函数模板不支持分离编译,那么怎么处理多重定义呢?

codesnail 2012-07-09 09:53:13
我用的vs2010,函数模板定义在头文件中,可是当有两个文件包含这个头文件就会出现多重定义的错误,请问如何解决啊,谢谢了!
...全文
153 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
codesnail 2012-07-09
  • 打赏
  • 举报
回复
谢谢!!!
Coder_Y_Jao 2012-07-09
  • 打赏
  • 举报
回复
1、可以使用内联特化等方法,比如:

template<>
inline void cu_test<const char*>(const char *test,const char *correct,
const char *file_name,const int line_cnt)
{
......
}

2、也可以在需要包含该头文件的cpp里进行特化
codesnail 2012-07-09
  • 打赏
  • 举报
回复

template<typename T>
void cu_test(const T test,const T correct,
const char *file_name,const int line_cnt)
{
if(test!=correct)
{
const char *str=file_name+strlen(file_name);
while(*str!='\\')
{
str--;
}
str++;
printf("%s的第%d行错误!\n",str,line_cnt);
}
}

//template<>
//void cu_test<const char*>(const char *test,const char *correct,
// const char *file_name,const int line_cnt)
//{
// if(strcmp(test,correct)!=0)
// {
// const char *str=file_name+strlen(file_name);
// while(*str!='\\')
// {
// str--;
// }
// str++;
// printf("%s | line %d error!\n",str,line_cnt);
// }
//}


codesnail 2012-07-09
  • 打赏
  • 举报
回复
谢谢ls回复,确实是我把函数模板的一个特化去掉以后就可以了,但是这个特化我是需要的啊。。。
FrankHB1989 2012-07-09
  • 打赏
  • 举报
回复
一般应该不会有这类问题。
只是要注意函数模版全特化同普通函数。
codesnail 2012-07-09
  • 打赏
  • 举报
回复
谢谢ls恢复,用了 #pragma once 问题依旧啊。。。。
W170532934 2012-07-09
  • 打赏
  • 举报
回复
你的头文件没有用#progama once这样的指令么

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧