类模板问题,说error LNK2019: 无法解析的外部符号,请教。
ys_w 2006-11-03 11:59:35 test.h
#include <iostream>
using namespace std;
template <class Type>
class Queue{
public:
Queue():front(0),back(0){}
~Queue();
Type remove();
void add(const Type &);
bool is_empty() const{ return front == 0;}
friend ostream & operator << <Type>(ostream &,const Queue<Type> &q);
private:
class QueueItem{
public:
QueueItem(const Type &t):item(t),next(0){}
friend ostream & operator<< <Type>(ostream &,const QueueItem &);
Type item;
QueueItem *next;
};
QueueItem *front;
QueueItem *back;
};
template <class Type>
Queue<Type>::~Queue()
{
while (!is_empty())
remove();
}
template <class Type>
Type Queue<Type>::remove()
{
if (is_empty())
{
cerr << "empty cannot remove" << endl;
exit(-1);
}
QueueItem *pt = front;
front = front->next;
Type retval = pt->item;
delete pt;
return retval;
}
template <class Type>
void Queue<Type>::add(const Type &val)
{
QueueItem *pt = new QueueItem(val);
if (is_empty())
front = back = pt;
else
{
back->next = pt;
back = pt;
}
}
template <class Type>
ostream& operator<<( ostream &os, const Queue<Type> &q )
{
os << "< ";
Queue<Type>::QueueItem *p;
for ( p = q.front; p; p = p->next )
os << *p << " ";
os << " >";
return os;
}
template <class Type>
ostream & operator<<(ostream &os,const typename Queue<Type>::QueueItem &q)
{
os << "< ";
QueueItem *p;
for (p = q.front;p;p = p->next)
os << p->item;
os << " >";
return os;
}
main.cpp
#include <iostream>
#include <vector>
#include "test.h"
using namespace std;
int main()
{
Queue<int> qi ;
int ival;
for (ival = 0;ival < 10;++ival)
qi.add(ival);
cout << qi;
int err_cnt = 0;
for (ival = 0;ival < 10;++ival)
{
int qval = qi.remove();
if (ival != qval) err_cnt ++;
}
if (!err_cnt)
cout << "execute ok"<< endl;
else
cerr << "execute error " << endl;
return 0;
}
在VS2003环境下,编译出现:error LNK2019: 无法解析的外部符号,但是将main中的cout注释掉,则
编译通过,不明白。