c++ - 模板类的困难

标签 c++ class templates stack

好吧,伙计们,我一直在尝试定义一个 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/

相关文章:

c++ - 路亚 "attempt to index a nil value"

C++ 变量地址和对齐 | x86

sql事务多个类vb.net

Python:为什么 Tkinter 类实例化必须使用框架?

c++ - 试图引用对象工厂中已删除的函数

c++ - 如何在 C++ 中使友元类的友元函数直接访问其私有(private)成员

c++ - 删除单向链表的所有节点

javascript - 将 <img class> 图像链接到 URL - 在 safari 和 chrome 中工作正常,但在 Firefox 中不行

javascript - 为什么这个随机的、意外的水平线会出现在 IE7 中?

c++ - live555如何打开本地.sdp文件