所以我最近编写了一个基于链接列表的Stack ADT实现。但是,我不太清楚为什么在声明Stack的节点之间会有一点差异。编译器非常生气,直到我以某种方式为某些函数编写它们才会编译。我非常好奇为什么会这样。
以下是编译器需要两种不同格式的两种不同方法。
这是我的析构函数,编译器需要StackNode *temp
。
template <typename DataType>
StackLinked<DataType>::~StackLinked() {
StackNode *temp;
while (top != 0) {
temp = top;
top = top->next;
delete temp;
}
}
这是我的赋值运算符重载,编译器需要StackNode<DataType> *temp
。
template <typename DataType>
StackLinked<DataType>& StackLinked<DataType>::operator=(const StackLinked& other) {
if (this != &other) {
StackNode<DataType> *newNode, *current, *last;
if (top != 0) {
StackNode<DataType> *temp;
while (top != 0) {
temp = top;
top -> top->next;
delete temp;
}
}
if (other.top == 0) {
top = 0;
}
else {
current = other.top;
top = new StackNode<DataType>;
top->dataItem = current->dataItem;
top->next = 0;
last = top;
current = current->next;
while (current != 0) {
newNode = new StackNode<DataType>;
newNode->dataItem = current->dataItem;
newNode->next = 0;
last-> next = newNode;
last = newNode;
current = current->next;
}
}
}
return *this;
}
我不知道为什么会这样,但未知的事情困扰着我。
注意:我的StackNode类是StackLinked类的内部类。
编辑:班级声明:
#ifndef STACKARRAY_H
#define STACKARRAY_H
#include <stdexcept>
#include <iostream>
using namespace std;
#include "Stack.h"
template <typename DataType>
class StackLinked : public Stack<DataType> {
public:
StackLinked(int maxNumber = Stack<DataType>::MAX_STACK_SIZE);
StackLinked(const StackLinked& other);
StackLinked& operator=(const StackLinked& other);
~StackLinked();
void push(const DataType& newDataItem) throw (logic_error);
DataType pop() throw (logic_error);
void clear();
bool isEmpty() const;
bool isFull() const;
void showStructure() const;
private:
class StackNode {
public:
StackNode(const DataType& nodeData, StackNode* nextPtr);
DataType dataItem;
StackNode* next;
};
StackNode* top;
};
#endif
如果需要任何其他细节。请问!感谢您的时间!
答案 0 :(得分:0)
根据您显示的代码,StackNode<DataType>
不正确,因为StackNode
不是类模板。
这让我觉得你有一个名为StackNode
的模板,编译器正在寻找它。检查您的任何文件是否包含其他版本的StackNode
。