为什么Visual Studio强制StackNode有两种不同的方式?

时间:2012-10-27 23:31:31

标签: c++ visual-studio-2010 data-structures linked-list stack

所以我最近编写了一个基于链接列表的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  

如果需要任何其他细节。请问!感谢您的时间!

1 个答案:

答案 0 :(得分:0)

根据您显示的代码,StackNode<DataType>不正确,因为StackNode不是类模板。

这让我觉得你有一个名为StackNode的模板,编译器正在寻找它。检查您的任何文件是否包含其他版本的StackNode