函数模板的简单有关问题
函数模板的简单问题。
cu_test.cpp
cu_test.h
main.cpp
提示如下错误:
error LNK2019: 无法解析的外部符号 "void __cdecl cu_test<unsigned short>(unsigned short,unsigned short,char const *,int)" (??$cu_test@G@@YAXGGPBDH@Z),该符号在函数 _main 中被引用
我把main函数放到cu_test.cpp中就无错误,请问是我的头文件声明的问题吗?感谢!
------解决方案--------------------
楼主知道模板是不支持分离编译的么?你把cu_test.cpp里面的函数合并到.h头文件中吧。
cu_test.cpp
- C/C++ code
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "cu_test.h" static int test_cnt=0; static int err_cnt=0; template<typename T> void cu_test(const T test,const T correct, char *const 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); err_cnt++; } test_cnt++; } template<> void cu_test<const char*>(const char *test,const char *correct, char const *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); err_cnt++; } test_cnt++; }
cu_test.h
- C/C++ code
#ifndef _CU_TEST_H_ #define _CU_TEST_H_ template<typename T> void cu_test(T test,T correct,const char* file_name,const int line_cnt); template<> void cu_test<const char*>(const char *test,const char *correct, const char *file_name,const int line_cnt); #define CU_TEST(test,correct) cu_test(test,correct,__FILE__,__LINE__) extern void CU_INFO(); #endif
main.cpp
- C/C++ code
#include <stdio.h> #include <stdlib.h> #include "cu_test.h" int main() { unsigned short a=1; unsigned short b=2; CU_TEST(a,b); system("pause"); return 0; }
提示如下错误:
error LNK2019: 无法解析的外部符号 "void __cdecl cu_test<unsigned short>(unsigned short,unsigned short,char const *,int)" (??$cu_test@G@@YAXGGPBDH@Z),该符号在函数 _main 中被引用
我把main函数放到cu_test.cpp中就无错误,请问是我的头文件声明的问题吗?感谢!
------解决方案--------------------
楼主知道模板是不支持分离编译的么?你把cu_test.cpp里面的函数合并到.h头文件中吧。