C++:在映射中存储类对象(错误:获取类型为"Node"的临时对象的地址)

C++: Storing class objects in a map (error: taking the address of a temporary object of type 'Node')

本文关键字:取类型 Node 临时对象 地址 获取 错误 映射 存储 对象 C++      更新时间:2023-10-16

我正在尝试创建一个节点列表,我有两个类:Node&节点列表。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的引用?

提前感谢!

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

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

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