-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];

为什么第二行指的是第一nosnodes?这只是一个错字吗?

如果这些确实是不同的对象,那可能可以解释为什么您会看到不一致的结果

于 2012-09-27T15:37:46.417 回答
0

您正在添加nodemapwith 键node_id,然后稍后查找它,root_id甚至不检查它是否找到一个,因此您可能通过访问end(nodes). 您需要使用相同的键访问地图以获取相同的对象。

no此外,nos当您显然需要访问其中一个node或地图的变量时,您似乎对您的变量有些困惑。

于 2012-09-27T15:38:38.597 回答