我是c++初学者,请问哪位下面代码为什么编译时有错啊?
//队列类模板的多文件实现
#include <iostream.h>
#include <string.h>
template <class TYPE>
struct queNode//声明队列接点类型
{
TYPE nodeData;
queNode *next;
};
//定义类模板
template <class TYPE>
class queue
{
protected:
int queueSize;//队列长度
queNode<TYPE> *head;//队头指针
queNode<TYPE> *tail;//队尾指针
public:
queue();//构造函数
queue(const queue &q);//拷贝构造函数
queue ©(queue &q);//队列拷贝函数
void clearQue();
bool Empty()
{
return queSize == 0;
}
void push(TYPE &x);//接点入队
bool pop(TYPE &x);//接点出队
queue &operator = (queue &q);//重载赋值运算符函数
~queue()
{
clearQue();
}
};
///类staff
static char *stringCopy(char *c)//类staff调用的字符串拷贝函数
{
char *ptr;
ptr = new char[strlen(c) + 1];
strcpy(ptr, c);
return ptr;
}
class staff
{
int age;
double salary;
char *name;
char *sex;
public:
void assign(int page, double psalary, char *pname, char *psex)
{
age = page;
salary = psalary;
name = stringCopy(pname);
sex = stringCopy(psex);
}
void print()
{
cout<<"name : "<<name<<endl;
cout<<"sex : "<<sex<<endl;
cout<<"age : "<<age<<endl;
cout<<"salary : "<<salary<<endl;
}
~staff()
{
delete[] name;
delete[] sex;
}
};
//queue.cpp文件
#include <iostream.h>
#include "queue.h"
template <class TYPE>
queue<TYPE>::queue()
{
queSize = 0;
head = NULL;
tail = NULL;
}
template <class TYPE>
queue<TYPE>::queue(const queue &q)
{
copy(q);
return *this;
}
template <class TYPE>
queue<TYPE> &queue<TYPE>::copy(queue &q)
{
queNode *tp, *tq, *tr;
if(head) clearQue();
queSize = q.queSize;
head = tail = NULL;
if(!q.head) return *this;
head = new queNode<TYPE>;
if(!head)
{
cout<<"error\n";
return *this;
}
head->nodeData = q.head->nodeData;
head->next = NULL;
tail = head;
tr = NULL;
tq = q.head->next;
tp = head;
while(tq)
{
tr = new queNode<TYPE>;
if(!tr)
{
cout<<"error\n";
return *this;
}
tr->nodeData = tq->nodeData;
tr->next = NULL;
tp->next = tr;
tail = tr;
tp = tp->next;
tq = tq->next;
}
return *this;
}
template <class TYPE>
void queue<TYPE>::clearQue()
{
TYPE x;
while(pop(x));
head = tail = NULL;
}
template <class TYPE>
queue<TYPE> &queue<TYPE>::operator = (queue &q)
{
copy(q);
return *this;
}
#include <iostream.h>
#include "queue.h"
//主函数main.cpp
void main()
{
queue<staff> q;//创建接点类型为staff的队列
staff s;//创建类对象
s.assign(19, 1500, "lijing", "female");
q.push(s);//对象入队
s.assign(22, 1500, "biru", "male");
q.push(s);//对象入队
s.assign(45, 3500, "yanglan", "male");
q.push(s);//对象入队
while(q.pop(s))
s.print();
char ch, array[] = {"lijingjing"};//定义字符数组
queue<char> que;//创建接点类型为char的队列
int i = 0;
while(ch = array[i++])//调用重载的赋值运算符函数
que.push(ch);//字符入队
while(que.pop(ch))
cout<<ch<<endl;
}
[解决办法]
C++ 中目前还不支持模板头文件和源文件的分离
参考
[解决办法]
将头文件和实现分别放在.h和.cpp中就可以了