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

时间:2022-11-28 04:14:49
想写一个遍历vector的模版函数,但是连接的时候报了这个错。
文件结构是
tool.h
template<class T>
void printvector(vector<T> v);
如果直接把函数定义和main函数放在一个文件里就能通过编译!
linux 下的g++编译器

7 个解决方案

#1


模板不支持分离式编译,要放在同一个文件中。

#2


你实现的函数体直接在头文件上写

#3


通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。

#4


实现也放在 .h 里再试一下。

#5


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

#6


引用 3 楼 qq423399099 的回复:
通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。
版主说的有道理

#7


通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。


3楼说得好

#1


模板不支持分离式编译,要放在同一个文件中。

#2


你实现的函数体直接在头文件上写

#3


通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。

#4


实现也放在 .h 里再试一下。

#5


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

#6


引用 3 楼 qq423399099 的回复:
通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。
版主说的有道理

#7


通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中。这就是为什么所有的STL头文件都包含模板定义的原因。


3楼说得好