|
我不是计算机专业的学生,最近在用C++,被一个弱智的include问题弄晕了,请高手指点一二:
程序有3个文件,main.cpp, a.h, a.cpp
main函数在 main.cpp里面
a.h 是类a的头文件,声明了一些接口
a.cpp是类a的实现文件
代码如下:
////////////////////////////////////main.cpp
#ifndef MAIN_CPP
#define MAIN_CPP
#include <iostream.h>
#include "a.h"
int main( )
{
a<int> d;
d.setdata(3);
cout << d.getdata()<<endl;
return 0;
}
#endif
#ifndef A_H
#define A_H
//////////////////////////////////////a.h
template<class type>
class a
{
public:
type data;
a() {}
~a() {}
void setdata(type value);
type getdata();
};
#endif
////////////////////////////////////////////a.cpp
#ifndef A_CPP
#define A_CPP
#include "a.h"
template<class type>
void a<type>::setdata(type value)
{
a<type>::data = value;
}
template<class type>
type a<type>::getdata()
{
return a<type>::data;
}
#endif
现在的问题是:
该段代码编译时可通过,但链接过程出问题了,VC6给出下列错误
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall a<int>::setdata(int)" (?setdata@?$a@H@@QAEXH@Z)
Debug/main.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
main.exe - 2 error(s), 0 warning(s)
然后我把a.cpp中的代码copy到a.h中,即a.h实现了类a的声明和定义,同时删除a.cpp,程序就没有任何问题了!
why???????? |
|