模板函数问题

heaven33 2009-06-01 11:38:37
如下3个文件:
//h1.h

template<class T> T com (const T & , const T & );

//h1.cpp

#include "h1.h"

template <class T> T com (const T & t1 , const T & t2 )
{
if (t1>=t2)
return t1;
else
return t2;

}

//cpp1.cpp

#include <iostream>

#include "h1.h"

int main()
{
std::cout << com(7,9) << std::endl;
}


为什么连接的时候出错了呢?
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
adventurelw 2009-06-01
  • 打赏
  • 举报
回复
对的
模版类也不能分开
大多数编译器都不支持分别编译。
把实现部分放在另外的cpp文件只有一个办法,就是在头文件的声明之后添加#include "xxx.cpp"
并且必须把该cpp文件从项目中排除。
heaven33 2009-06-01
  • 打赏
  • 举报
回复
那模板类呢?模板类也不能分开么
lingyin55 2009-06-01
  • 打赏
  • 举报
回复
为什么C++编译器不支持模板头文件和实现代码分离的编译
http://blog.csdn.net/thinkscape/archive/2008/12/20/3567420.aspx
id27145 2009-06-01
  • 打赏
  • 举报
回复
模板函数的定义放到头文件里去,去掉h1.cpp
qizhao2001 2009-06-01
  • 打赏
  • 举报
回复
模版实现不能分在cpp中,h1.cpp 不用存在,实现要写在h1.h中,这样模版推导时需要模版代码
sszwbuaa 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Jalien 的回复:]
使用包含编译模型吧,所有的编译器都支持的。
使用包含编译模型就可以将定义和声明分离开来。

//h1.h

C/C++ code
#ifndef H1_H
#define H1_H

template <class T> T com (const T & , const T & );

#include "h1.cpp"
#endif H1_H//H1_H




//h1.cpp

C/C++ code
#ifndef H1_CPP
#define H1_CPP
#include "h1.h"

template <class T> T com (const T & t1 , const T & t2 )
{
if (t1>=t…
[/Quote]
确实是这样的,C++Primer中又说过。
zhangjundriver 2009-06-01
  • 打赏
  • 举报
回复
模板函数和模板类都是一样,现在支持分离编译的只有一个编译器EDG编译器。要想知道为什么请看exceptional C++ style (herb sutter)上面的第九和第十条。就讲得很清楚的。
Jalien 2009-06-01
  • 打赏
  • 举报
回复
使用包含编译模型吧,所有的编译器都支持的。
使用包含编译模型就可以将定义和声明分离开来。

//h1.h

#ifndef H1_H
#define H1_H

template <class T> T com (const T & , const T & );

#include "h1.cpp"
#endif H1_H//H1_H


//h1.cpp

#ifndef H1_CPP
#define H1_CPP
#include "h1.h"

template <class T> T com (const T & t1 , const T & t2 )
{
if (t1>=t2)
return t1;
else
return t2;

}
#endif H1_CPP //H1_CPP


//test.cpp

#include <iostream>
#include "h1.h"

int main()
{
std::cout << com(7,9) << std::endl;
}


以上代码VS 2008编译通过。还有一种编译模型时是分别编译模型,但是并非所有的编译器都实现了,但是上面所说的包含编译模型是所有编译器都实现了的。
夹心饼干 2009-06-01
  • 打赏
  • 举报
回复
作成hpp文件

65,211

社区成员

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

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