返回信息流SQList.h代码如下:
include <iostream>
using namespace std;
template <class T >
class SeqList
{
private:
enum{defaultsize=1000};
public:
SeqList(int size=defaultsize);
~SeqList(){delete [] data;}
int Length();
int Find(const T& x);
bool Isin(const T&x);
int Insert(const T&x,int i);
int ReMove(const T&x);
int Next(const T&x);
int Prior(const T&x);
bool isEmpty();
bool isFull();
friend ostream& operator<<( ostream&outStream,const SeqList<T>&outList);
private:
T *data;
int Maxsize;
int last;
};
SQList.cpp的代码如下
#include "SQList.h"
template <class T>
SeqList<T>::SeqList(int size)
{
if (size>0)
{
Maxsize=size;
last=-1;
data=new T[Maxsize];
}
else
{
cout<<"The seqlist's zise must >0 "<<endl;
exit(1);
}
}
template <class T>
int SeqList<T>::Length()
{
return last+1;
}
template <class T>
int SeqList<T>::Find(const T&x)
{
int i=0;
while(i<=last&&data[i]!=x)i++;
if(i>last) return -1;
else return -1;
}
template <class T>
bool SeqList<T>::Isin(const T&x)
{
bool found=false;
for (int i=0;i<Maxsize;i<++)
{
if (data[i]==x)
{
found=true;
break;
}
}
}
template <class T> int SeqList<T>::Insert(const T &x, int i)
{
if(i<0||i>last+1||last==Maxsize-1)
return 0;
else
{
last++
for (int j=last;j>i;j--)
{
data[j]=data[j-1];
}
data[i]=x;
return 1;
}
}
template <class T>
int SeqList<T>::ReMove(const T &x)
{
int i=Find(x);
if (i>=0)
{
last--;
for (int j=i;j<last;j++)
data[j]=data[j+1];
return 1;
}
return 0;
}
template <class T>
int SeqList<T>::Next(const T &x)
{
int i=Find(x);
if (i>=0&&i<last)
{
return i+1;
}
else
return -1;
}
template<class T>
int SeqList<T>::Prior(const T&x)
{
int i=Find(x);
if(i>0&i<=last)
return i-1;
else
return -1;
}
template<class T> ostream &operator<<( ostream&outStream,const SeqList<T>outList)
{
for (int i=0;outList.last;i++)
{
outStream<<"pos"<<i<<":"<<"value"<<outList.data[i]<<' ';
}
return outStream;
}
main.cpp的代码如下:
#include "SQList.h"
int main()
{
SeqList<int> TestList(100);
return 0;
}
编译通过,链接的时候出现:
error LNK2001: unresolved external symbol "public: __thiscall SeqList<int>::SeqList<int>(int)" (??0?$SeqList@H@@QAE@H@Z)
试了下,发现模版类里面的函数都存在这个问题。。
请教各位大牛
这是一条镜像帖。来源:北邮人论坛 / cpp / #5385同步于 2008/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]模版函数出错
zilch
2008/4/21镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
我也遇到过这个问题,应该把头文件和实现文件内容放在一个文件里就行了
形象的说就是:
#ifndef _a_h
#define _a_h
//声明部分,也就是那些函数头
#endif
//实现部分,也就是那些函数体
以上放在一个文件里就行了
【 在 zilch (潜龙) 的大作中提到: 】
: 为什么找不到这些函数呢?
: 我头文件已经包括进去了阿
我试了一下就是这个问题,把函数的声明部分和实现部分要放在一个文件里,两者之间要用#endif隔开,不然的话函数会自动内联(虽然不会影响实现,但是显然不是我们的本意)
原来也碰到这个问题
【 在 purevirtual (天之健) 的大作中提到: 】
: 我也遇到过这个问题,应该把头文件和实现文件内容放在一个文件里就行了
: 形象的说就是:
: #ifndef _a_h
: ...................
喔,原来如此
不过话说回来,我个人觉得extern关键字还是少用为妙
【 在 skylion (苍之涛) 的大作中提到: 】
: 默板类的声明和实现应该都放到一个文件中。
: 也可以不放到一起,但需要extern的声明。