none
cpp文件中定义函数模版 另一个cpp文件中调用时出错 RRS feed

  • 问题

  • 在一个.cpp文件(不是.h)中定义如下函数模版:

    template <typename T>
    int cmp(const T &tA, const T &tB){
    	if(tA > tB)
    		return 1;
    	else if(tA == tB)
    		return 0;
    	else
    		return -1;
    }

    在另一个.cpp文件中调用该函数:

    template <typename T>
    extern int cmp(const T&, const T&);
    
    int main(){
    	int iA = 1, iB = 2;
    	string strA = "1", strB = "2";
    
    	cout << cmp(iA, iB) << endl << cmp(strA, strB) << endl;
    
    	return EXIT_FAILURE;
    }

    编译时遇到如下错误:

    error LNK2019: unresolved external symbol "int __cdecl cmp<int>(int const &,int const &)" (??$cmp@H@@YAHABH0@Z) referenced in function _main 

    error LNK2019: unresolved external symbol "int __cdecl cmp<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$cmp@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@YAHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) referenced in function _main

    请问这是怎么回事儿啊?定义一个普通函数(不用模版)这样调用时是没问题的...

    函数定义放在.h文件中是没问题的...
    • 已编辑 MTiancai 2012年6月7日 14:16 Update
    2012年6月7日 14:13

答案

全部回复