函数模板的简单问题。
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头文件中吧。