好吧,伙计们,我一直在尝试定义一个 Stack ,每个节点也是模板类型,但是当 prog 尝试编译时我遇到了十几种不同类型的错误。我将粘贴使用字符型堆栈并尝试弹出字母“e”的程序
#ifndef STACK_LIST_H
#define STACK_LIST_H
#include "List.h"
using namespace std;
template <class T>
class Stack {
public:
T pop();
void push(T x);
T isEmpty();
T top();
private:
int size;
Node<T> * headNode;
Node<T> * currentNode;
};
#endif
现在是函数定义:
#include <iostream>
#include "Stack_list.h"
using namespace std;
template <class T>
T Stack<T>::pop(){
T x = headNode->get();
Node<T>* p = new Node<T>::Node();
p = headNode;
headNode = headNode->getNext();
delete p;
return x; }
template <class T>
void Stack<T>::push(T x){
Node<T>* newNode = new Node<T>::Node();
newNode->setNext(headNode);
newNode->set(x);
headNode=newNode;
}
template <class T>
int Stack<T>::isEmpty(){
return (headNode ==NULL);}
template <class T>
T Stack<T>::top(){
return headNode->get();
}
现在是模板类节点:
#ifndef LIST_H
#define LIST_H
using namespace std;
/* The Node class */
template <class T>
class Node
{
public:
Node(T here){object=here;};
T get() { return object; };
void set(T object) { this->object = object; };
Node<T>* getNext() { return nextNode; };
void setNext(Node<T>* nextNode) { this->nextNode = nextNode; };
Node<T>* getPrev(){ return prevNode;};
void setPrev(Node<T>* prevNode){this->prevNode=prevNode;};
private:
T object;
Node<T>* nextNode;
Node<T>* prevNode;
};
#endif
最后是调用类的程序:
#include <iostream>
#include "Stack_list.cpp"
using namespace std;
int main(){
Stack <char>s;
s.push("e");
cout<<s.pop();
}
如您所见,这是我第一次尝试模板类。在 Stack::pop() 和 push(T) 的定义中,它说,“‘节点’之前的预期类型说明符”
最佳答案
Node<T>* newNode = new Node()
不一致。是Node
类或类模板?第一次提到它时,您将其视为模板并用 T
实例化它。 ,但是第二次你把它当作一个类。不能两者兼而有之。
关于c++ - 模板类的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880368/