自定义一个模板类, 声明和定义不能分别放到.h和.cpp文件中吗?
看我下面的代码:
//queue.h
template <class Type>
class TQueue
{
public:
TQueue(){}
~TQueue(){}
void add(const Type& queueItem);
...
};
//queue.cpp
#include "queue.h"
template <class T>
void TQueue<T>::add(const T& queueItem)
{
...
}
//main.cpp
#include "queue.h"
int main(int argc, char* argv[])
{
TQueue<int>* p = new TQueue<int>();
p->add( 2 );
delete p;
return 0;
}
感觉很正常的使用啊, 但编译时却出现如下错误:
Linking...
q.obj : error LNK2001: unresolved external symbol "public: void __thiscall TQueue<int>::add(int const &)" (?add@?$TQueue@H@@QAEXABH@Z)
Debug/q.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
q.exe - 2 error(s), 0 warning(s)
//queue.h
template <class Type>
class TQueue
{
public:
TQueue(){}
~TQueue(){}
void add(const Type& queueItem);
...
};
//queue.cpp
#include "queue.h"
template <class T>
void TQueue<T>::add(const T& queueItem)
{
...
}
//main.cpp
#include "queue.h"
int main(int argc, char* argv[])
{
TQueue<int>* p = new TQueue<int>();
p->add( 2 );
delete p;
return 0;
}
感觉很正常的使用啊, 但编译时却出现如下错误:
Linking...
q.obj : error LNK2001: unresolved external symbol "public: void __thiscall TQueue<int>::add(int const &)" (?add@?$TQueue@H@@QAEXABH@Z)
Debug/q.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
q.exe - 2 error(s), 0 warning(s)
...全文
相关推荐
C++ .h和.cpp文件总结
总结了.h文件能做什么,.cpp文件能做什么,总结了.h文件的本质,方便新手在遇到文件包含、类型声明、变量定义时能理清.h与.cpp关系,纯属个人总结文档。
一个工程有.cpp,.h等很多文件怎么连接在一起
一个工程可以有多个CPP,但CPP的名字不能相同,因为编译的OBJ的文件是以CPP为单位。多个.cpp,.h文件是怎么连接在一起的?不同CPP文件的函数可以通过声明的方式使用,通常声明放在H文件里,而想引用其它CPP文件的变量可以使用extern 这个也通常放在H文件。
c++ 类的声明和定义
c++类的声明和定义是在学习c++中开始会遇到的问题,希望有所帮助!
C++函数声明和定义
C++函数声明和定义 声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。即:声明是给编译器用的,定义是给连接器用的。这个说明显得很模糊,为什么非要弄个声明和定义在这搅和?那都是因为C++同意将程序拆成几段分别书写在不同文件中以及上面提到的编译器只从上朝下编译且对每个文件仅编译一次。
C++_关于声明,定义,类的定义,头文件作用
C++_关于声明,定义,类的定义,头文件作用


