在视觉工作室的标题中出现错误。 pop函数适用于堆栈,但是当它涉及队列时它不起作用并且在调试时出现错误。
在queue.cpp中
std::string &Queue::dequeue()
{
if (inbox.isEmpty(inbox))
{
std::cout << "The queue is empty!";
return inbox.pop(inbox);
}
else
return inbox.pop(inbox);
}
在stack.cpp中
bool stack::isEmpty(stack& stack1)
{
if (stack1.value =="")
return true;
else
return false;
}
std::string stack::pop(stack &stack1)
{
if (isEmpty(stack1))
{
std::cout << "The stack is empty ";
return stack1.value;
}
else
{
if(stack1.next != NULL)
{
std::string val1 = stack1.value;
stack1 = *stack1.next;
return val1;
}
else
{
std::string val2 = stack1.value;
stack1.value="";
stack1.next = NULL;
return val2;
}
}
}
答案 0 :(得分:1)
return inbox.pop(inbox);
无法编译。 inbox.pop(inbox)
是一个右值,因此无法绑定到非const引用。
可能你已经启用了编译器扩展以允许这种绑定(我认为MSVC默认执行此操作),但是你仍然返回对不再存在的对象的引用,导致未定义
行为。 (pop()
返回的临时字符串仅存活到下一个;
,然后被破坏。
要解决此问题,请更改
std::string &Queue::dequeue()
到
std::string Queue::dequeue()
(显然,也改变了函数声明)。
您还没有提供足够的代码来确定stack::pop
是否有任何错误(尽管看起来确实有点奇怪)。至少显示stack
及其构造函数的类定义。