首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速问题:为什么我对pop()的调用不起作用?C++堆栈

快速问题:为什么我对pop()的调用不起作用?C++堆栈
EN

Stack Overflow用户
提问于 2020-04-28 11:05:51
回答 1查看 79关注 0票数 0

我正在学习当前CS课程中的堆栈。当我在函数上工作时,当我去测试pop函数时,我得到了错误:“没有匹配的函数来调用DynStack::pop()”

下面是我的代码:

main()

代码语言:javascript
运行
复制
#include <iostream>
#include <cstddef>
#include "src\DynStack.cpp"
#include "DynStack.h"

using namespace std;


int main()
{
    DynStack<char>cstack;
    cstack.push('A');
    cstack.push('B');
    cstack.push('C');

    cstack.pop();

    cout << cstack.top->value << endl;

    return 0;
}

DynStack.cpp

代码语言:javascript
运行
复制
#include "DynStack.h"
#include <cstddef>

template<typename T>
DynStack<T>::DynStack()
{
    top = NULL;
}

template<typename T>
void DynStack<T>::push(T val)
{
    StackNode *nodePtr; // ptr to traverse thru the stack

    StackNode *newNode;
    newNode = new StackNode; // makes a new StackNode
    newNode->value = val;
    newNode->next = NULL;

    if (top == NULL) // If the stack is empty
    {
        top = newNode; // Make newNode the first node;
    }
    else
    {
        nodePtr = top; // make our ptr = top

        nodePtr->next = newNode; // make the node after the top our newNode

        top = newNode; // newNode is our new top of the stack
    }
}

template <typename T>
void DynStack<T>::pop(T &)
{
    StackNode *nodePtr; // makes a nodePtr to traverse the stack

    if (top == NULL)
    {
        return;
    }
    else
    {
        nodePtr = top;
        nodePtr = top--;
        delete top;
        top = nodePtr;
        delete nodePtr;
    }

}




template <typename T>
DynStack<T>::~DynStack()
{
    //dtor
}

DynStack.h

代码语言:javascript
运行
复制
#ifndef DYNSTACK_H
#define DYNSTACK_H

template <typename T>
class DynStack
{
    private:
        struct StackNode
        {
            T value;
            StackNode *next;
        };

        StackNode *top;

    public:
        DynStack();
        ~DynStack();
        void push(T);
        void pop(T&);
        bool isEmpty();
};

#endif // DYNSTACK_H

我对这个程序的测试还处于非常早期的阶段。我假设我必须把一些东西放在cstack.pop();的括号中,但是我不知道应该放什么?Pop只会删除一个值,是吗?我不认为它需要任何输入。

如果是我的程序,我会考虑从void DynStack::pop( T & )中删除T&,但这是我的教授放在那里的。我想是他把它放在那里的,所以我必须学习这个。我在谷歌上搜索了一大堆,但没有更近一步。

谢谢你们。

EN

Stack Overflow用户

回答已采纳

发布于 2020-04-28 12:08:53

在你的代码中

代码语言:javascript
运行
复制
void pop(T&);

T&表示此函数需要类型为T (在本例中为char )的(引用)参数。您没有提供,所以代码不会编译。您需要将char变量添加到代码中

代码语言:javascript
运行
复制
char x;
cstack.pop(x);
cout << "the top item on the stack was " << x << endl;

我认为你遗漏的是pop不只是从堆栈中移除一个项目,它还通过引用代理“返回”该项目。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61471956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档