首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

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

2012-02-20 
奇怪的问题,#include 源文件正常 #include 头文件出link错误,请高手解答一下比如下面写的最简单的测试程序

奇怪的问题,#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里就不会有这些函数.

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

热点排行