转换从“void”到非标量类型“std::pair<std :: basic_string<char,std :: char_traits<char> >,int>”

7

我有一堆成对的数据在一个名为spreadsheet的对象中:

std::stack< std::pair<std::string, std::string> > undoStack;

我正在尝试弹出堆栈并将其赋值给另一对:

std::pair<std::string, std::string> change = spreadsheets.at(i).undoStack.pop();

我遇到了这个错误:

error: conversion from ‘void’ to non-scalar type ‘std::pair<std::basic_string<char,   std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >’ requested

这里出了什么问题?
2个回答

15

stack::pop() 返回 void,但你试图将其赋值给一个变量。在弹出栈顶元素之前,你需要调用 top() 方法来获取该元素。

std::pair<std::string, std::string> change = spreadsheets.at(i).undoStack.top();
spreadsheets.at(i).undoStack.pop();
你应该查看 std::stack 的文档来熟悉它的成员函数和使用方法。 关于std::stack的文档

啊,太好了。我以为 pop 的工作方式和 C# 或 Java 一样。 - Deekor
1
我包含了一个指向堆栈文档的链接。整个网站都是C++和标准库的绝佳参考资料。 - Captain Obvlious

1
你的栈的pop()函数返回void,存在类型不匹配的问题。
你应该调用undoStack.top()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接