函数模板的简单有关问题

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