C++函数模板使用中的注意事项
来源:互联网 发布:拉里·伯德数据 编辑:程序博客网 时间:2024/05/18 00:21
举个例子:
template <typename elemType>void display_message(const string &msg,const vector<elemType> &vec){ cout<<msg; for (int ix=0;ix<vec.size();++ix) { elemType t=vec[ix]; cout<<t<<' '; } cout<<endl;}
这是一个简单的函数模板的定义,但是如果把定义放在头文件中,函数体放在.CPP中会出现什么问题呢?
main.obj : error LNK2001: unresolved external symbol "void __cdecl display_message(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::vector<int,class std::allocator<int> > const &)" (?display_message@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV?$vector@HV?$allocator@H@std@@@2@@Z)
好尴尬,你只能看出这是link的错误,但是如果你只这一个错误的话,或许没问题,但是如果你对这个函数同时重载的话,也许你就不觉得这个问题那简单了
template <typename elemType>void display_message(const string &msg,const vector<elemType> &vec){ cout<<msg; for (int ix=0;ix<vec.size();++ix) { elemType t=vec[ix]; cout<<t<<' '; } cout<<endl;}void display_message(const string &msg, int size){ cerr<<msg<<size<<"\n";}
这样的重载从语法上来说是完全没有问题的,然而,正确的做法是,将这两个函数体,同时放在.h文件中,或者,模板函数放在.h文件中,普通的重载函数体,放在.cpp源文件中,这样就没有任何问题了。
0 0
- C++函数模板使用中的注意事项
- copying函数使用中的注意事项
- C语言中的scanf函数的注意事项
- 函数模板注意事项
- Keil C51 中的函数指针使用注意事项
- Keil C51 中的函数指针使用注意事项
- c语言函数指针使用注意事项
- C++模板使用注意事项
- Traits技法在函数模板中的使用
- 函数模板使用过程中的问题
- iOS项目中调用C/C++库中的函数注意事项
- iOS项目中调用C/C++库中的函数注意事项
- golang 操作c 标准库中的CString函数注意事项
- c++:使用function模板和bind函数
- Python中的函数注意事项
- 模板类的使用注意事项
- Thymeleaf 模板的使用--注意事项
- C中的函数指针使用
- mysql优化
- Python日志模块logging格式化封装
- Linux系统编程——vfork() 函数详解
- linux环境下使用opencv训练级联分类器traincascade
- Linux系统编程——进程的控制:结束进程、等待进程结束
- C++函数模板使用中的注意事项
- HEVC,VP9,x264性能对比
- 圆形切换按钮
- 随笔:spring+quartz定时任务(1)
- Android Studio jni编译生成so文件
- java注释
- Linux系统编程——特殊进程之僵尸进程
- PTV热力学计算助手
- JavaWeb_Servlet开发