我有我的堆栈类,我在其中实现了该类中定义的节点的深层副本。 现在我必须实现Queue类的复制构造函数,它调用Stack类的复制构造函数。
所以这是我的Stack.h和Stack.C(我使用LINUX):
#ifndef STACK_H
#define STACK_H
#include "MyException.h"
#include <iostream>
using namespace std;
template<class T>
class Stack;
template<class T>
ostream& operator<<(ostream&,Stack<T>&);
template<class T>
class Stack
{
public:
friend ostream& operator<< <T>(ostream&,Stack<T>&);
/*The constructor for the Stack class*/
Stack();
/*The copy constructor*/
Stack(const Stack<T>& other);
Stack<T>& operator=(const Stack<T>& other);
~Stack();
void push(const T& el);
T pop();
bool isEmpty();
private:
/*The node class.*/
class Node
{
public:
Node(const T& data, Node* n = 0)
{
element = data;
next = n;
}
T element;
Node* next;
};
/*The top of the stack*/
Node* top;
};
#include "Stack.C"
#endif
你可以假设所有方法都可以正常工作。
我有一个Queue类,其定义如下:
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include "MyException.h"
#include "Stack.h"
using namespace std;
template<class T>
class Queue;
template<class T>
ostream& operator<<(ostream&,Queue<T>&);
template<class T>
class Queue
{
public:
friend ostream& operator<< <T>(ostream&,Queue<T>&);
Queue();
Queue(const Queue<T>& other);
Queue<T>& operator=(const Queue<T>& other);
/*The destructor*/
~Queue();
void enqueue(const T& el);
T dequeue();
bool isEmpty();
private:
/*You must store your elements in this stack*/
Stack<T>* stack;
};
#include "Queue.C"
#endif
我已经实现了我的复制构造函数:
template<class T>
Queue<T>::Queue(const Queue<T>& other)
{
Stack<T> *test = new Stack<T>(*other.stack);
}
当我在Stack类中测试我的复制构造函数时,一切正常,但是当我在Queue类中测试我的复制构造函数时,我得到了一个Segmentation错误,问题是什么?
谢谢