从'void'转换为非标量类型'std :: pair <std :: basic_string <char,std :: char_traits <char =“”> </std :: basic_string <char,>

时间:2013-04-23 03:14:59

标签: c++

我在spreadsheet obj:

中有一堆配对
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 个答案:

答案 0 :(得分:11)

stack::pop()返回void但您尝试将其分配给变量。您需要调用top()以便在将其从堆栈中弹出之前检索该元素。

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

您应该查看std::stack的文档,以熟悉它的成员函数和使用。

documentation for std::stack

答案 1 :(得分:1)

您的pop()堆栈函数返回void。你有类型不匹配。

您应该致电undoStack.top()