【问题标题】:C++: Storing class objects in a map (error: taking the address of a temporary object of type 'Node')C ++:将类对象存储在映射中(错误:获取“节点”类型的临时对象的地址)
【发布时间】:2016-04-11 20:07:16
【问题描述】:

我正在尝试创建一个节点列表,我有两个类:节点和节点列表。 Node 的构造函数如下所示:

Node::Node(int identifier, bool weighted){
    ID_ = identifier;
    numberOfConnections_ = 0;
    weighted_ = weighted;
}

当我尝试使用此方法在节点之间添加连接时:

void Nodelist::addOneWayConnection(int source, int target){
    connections_[source] = &Node(source, weightedlist_);    <-- error
    connections_[target] = &Node(source, weightedlist_);    <-- error
    connections_[source]->addConnection(connections_[target]);
}

我得到错误:

错误:获取“节点”类型的临时对象的地址

如何存储对 Node 类的引用?

提前致谢!

【问题讨论】:

  • connections_ 是如何定义的?您的解决方案很可能是摆脱 &。
  • std::map connections_;
  • 您需要为Node 源和目标分配一定的空间。
  • 临时对象适用于复制或移动,但不适用于获取引用或地址。

标签: c++ class temporary


【解决方案1】:

您不想存储对它的引用。它在表达式之后不再存在。正如错误告诉你的那样,它是“暂时的”。您应该直接存储节点,或者存储一个指针并使用new 来分配它们。

编辑:从您的评论中,我注意到connections_ 实际上需要一个指针(正如我所说的,您可以在上面使用)。您需要分配新节点。

connections_[source] = new Node(source, weightedlist_);
connections_[target] = new Node(source, weightedlist_);

【讨论】:

  • 别忘了提到他们必须清理代码才能在完成后删除这些指针。否则就会出现内存泄漏。
猜你喜欢
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多