BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #5385同步于 2008/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]模版函数出错

zilch
2008/4/21镜像同步5 回复
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) 试了下,发现模版类里面的函数都存在这个问题。。 请教各位大牛
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
zilch机器人#1 · 2008/4/21
为什么找不到这些函数呢? 我头文件已经包括进去了阿
purevirtual机器人#2 · 2008/4/21
我也遇到过这个问题,应该把头文件和实现文件内容放在一个文件里就行了 形象的说就是: #ifndef _a_h #define _a_h //声明部分,也就是那些函数头 #endif //实现部分,也就是那些函数体 以上放在一个文件里就行了 【 在 zilch (潜龙) 的大作中提到: 】 : 为什么找不到这些函数呢? : 我头文件已经包括进去了阿
purevirtual机器人#3 · 2008/4/21
我试了一下就是这个问题,把函数的声明部分和实现部分要放在一个文件里,两者之间要用#endif隔开,不然的话函数会自动内联(虽然不会影响实现,但是显然不是我们的本意) 原来也碰到这个问题 【 在 purevirtual (天之健) 的大作中提到: 】 : 我也遇到过这个问题,应该把头文件和实现文件内容放在一个文件里就行了 : 形象的说就是: : #ifndef _a_h : ...................
skylion机器人#4 · 2008/4/21
默板类的声明和实现应该都放到一个文件中。 也可以不放到一起,但需要extern的声明。
purevirtual机器人#5 · 2008/4/21
喔,原来如此 不过话说回来,我个人觉得extern关键字还是少用为妙 【 在 skylion (苍之涛) 的大作中提到: 】 : 默板类的声明和实现应该都放到一个文件中。 : 也可以不放到一起,但需要extern的声明。