-1

だから私はこれを持っています:

//sons is an attribute of the object node that is a vector<Node*> that is initialized before
map<string,Node*> nodes;
string node_id = "node";
string son_id = "son";

Node *node = new Node(node_id, matrix, son_id, Prim);
cout << "Before " << node << endl;
cout << "Value of sons before map: " << node->sons[0] << endl;

nodes[node_id] = node;

cout << "After: " << nodes.find(node_id)->second << endl;
cout << "Value of sons after map: " << nodes.find(node_id)->second->sons[0];

私はこの出力を取得しています(実行ごとにメモリ位置が異なります):

Before: 0x9dfdda8
Value of sons before map: 0xbff1a774 // consistant with memory position with created obj
After: 0x9dfdda8
Value of sons after map: 0

なぜこれが起こっているのですか、どうすれば修正できますか?! 私は解決策を探していて、今4時間これを理解しようとしています...

4

2 に答える 2

0
cout << "After: " << nodes.find(root_id)->second << endl;
cout << "Value of sons after map: " << nos.find(root_id)->second->sons[0];

nos2 行目が1行目を参照しているのはなぜnodesですか? ただのタイプミスですか?

それらが本当に異なるオブジェクトである場合、一貫性のない結果が表示される理由を説明できる可能性があります

于 2012-09-27T15:37:46.417 に答える
0

キーを使用してに追加nodeし、後で検索して、見つかったかどうかを確認することさえしないため、 にアクセスすることで未定義の動作が発生する可能性があります。同じオブジェクトを取得するには、同じキーでマップにアクセスする必要があります。mapnode_idroot_idend(nodes)

また、明らかにまたはマップの変数にアクセスする必要があるときに、 noandを使用して、変数と混乱しているようです。nosnode

于 2012-09-27T15:38:38.597 に答える