当前位置: 代码迷 >> VC >> 奇怪的有关问题,include 源文件正常 #include 头文件出link异常,请高手解答一下
  详细解决方案

奇怪的有关问题,include 源文件正常 #include 头文件出link异常,请高手解答一下

热度:6324   发布时间:2013-02-25 00:00:00.0
奇怪的问题,#include 源文件正常 #include 头文件出link错误,请高手解答一下
比如下面写的最简单的测试程序:
main.cpp:
#include   <iostream>
#include   "myself.h "
#include   "Test.h "
using   namespace   std;

int   main()
{
Base <int>   ab;
cout   < <ab.m_num;
return   0;
}
//------------------------------------------------------------------
Test.h:
#ifndef   TEST_H
#define   TEST_H
template   <typename   T>
class   Base
{
public:
T   m_num;
public:
Base();
Base(T   i);
// virtual   ~Base();
};
#endif
//------------------------------------------------------------------
Test.cpp:
#include   "stdafx.h "
#include   "Test.h "

template   <typename   T>   Base <T> ::Base(){m_num   =   0;   }

template   <typename   T>   Base <T> ::Base(T   i){m_num   =   i;}

在主程序中包含头文件就出error   LNK2001:   无法解析的外部符号   "public:   __thiscall   Base <int> ::Base <int> (void) "   (??0?$Base@H@@QAE@XZ)错误,但是包含Test.cpp就没有任何问题。这一点奇怪的现象在同样的程序,不使用模版的时候不存在,使用模版的事就就只能包含源文件,请求答案,谢谢了

------解决方案--------------------------------------------------------
模版必须写在一个文件里

------解决方案--------------------------------------------------------
模板函数和一般的函数的区别是:
一般的函数只要写了.
编译时编译器就会生成它的机器码.
而模板则是只有当你调用该函数时,编译器会先生成相应的函数的C++代码,然后再编译成机器码.
这样可以避免生成过于臃肿的代码.
所以你如果把模板函数单独放在 cpp中而在这个cpp中并没有用到它.生成的obj里就不会有这些函数.

至于咋解决嘛....
自然是全写在头文件里咯.
  相关解决方案