1

我定义了以下内容:

Stack<ASTNode*>* data;

类的定义方式,如果我做data->push()or data->pop(),我直接压入堆栈或弹出堆栈。要获得堆栈顶部的节点,我会这样做data->peek()。出于测试目的,我想打印出堆栈中的顶部节点,如下所示:

cout << "top of stack is... " << ? << endl;

我不确定语法是什么或如何取消引用它。

在此先感谢, Hristo

4

3 回答 3

7

这取决于您需要多少信息。如果您只需要堆栈顶部的对象的地址(可能足以进行调试,取决于您在做什么我猜)答案很简单:

cout << "top of stack is..." << data->peek() << endl;

如果您需要对象本身,只需使用:

cout << "top of stack is..." << *(data->peek()) << endl;

或者

cout << "top of stack is..." << data->peek()->someIdentifyingMethod() << endl;
于 2009-10-15T17:18:06.120 回答
7

您正在寻找的语法应该是这样的:

cout << "top of stack is... " << *(data->peek()) << endl;

为此,需要operator<<定义 for ASTNode。如果不是这种情况,您可以定义自己的,如下所示:

std::ostream& operator<<(std::ostream &strm, const ASTNode &node) {
  return strm << node.name << ": " << node.value;
}
于 2009-10-15T17:21:37.363 回答
2

假设您的 ASTNode 类重载了 operator<<,看起来您需要:

cout << "top of stack: " << *(data->peek()) << endl;
于 2009-10-15T17:18:57.370 回答