1

私は以下を定義しています:

Stack<ASTNode*>* data;

クラスが定義されている方法は、data->push()またはを行う場合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 に答える