遍历vector的错误:undefined reference to printvector(int,std::allocator >&)

dongihz 2017-02-12 05:48:44
想写一个遍历vector的模版函数,但是连接的时候报了这个错。
文件结构是
tool.h
template<class T>
void printvector(vector<T> v);
如果直接把函数定义和main函数放在一个文件里就能通过编译!
linux 下的g++编译器
...全文
592 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。 3楼说得好
ri_aje 2017-02-13
  • 打赏
  • 举报
回复 1
实现也放在 .h 里再试一下。
小灸舞 2017-02-13
  • 打赏
  • 举报
回复 1
通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。
AlbertS 2017-02-13
  • 打赏
  • 举报
回复 1
引用 3 楼 qq423399099 的回复:
通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。
版主说的有道理
FD_2013 2017-02-13
  • 打赏
  • 举报
回复 2
1楼正解
幻夢之葉 2017-02-12
  • 打赏
  • 举报
回复 2
你实现的函数体直接在头文件上写
yshuise 2017-02-12
  • 打赏
  • 举报
回复 2
模板不支持分离式编译,要放在同一个文件中。

64,654

社区成员

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

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