读书人

奇怪的有关问题include 源文件正常

发布时间: 2012-02-20 21:18:23 作者: rapoo

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

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

读书人网 >VC

热点推荐