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

C++ C++;:在映射中存储类对象(错误:获取类型为';节点';的临时对象的地址),c++,class,temporary,C++,Class,Temporary,我正在尝试创建节点列表,我有两个类:节点和节点列表。节点的构造函数如下所示: Node::Node(int identifier, bool weighted){ ID_ = identifier; numberOfConnections_ = 0; weighted_ = weighted; } 当我尝试使用此方法在节点之间添加连接时: void Nodelist::addOneWayConnection(int source, int target){ co

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

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]);
}
void节点列表::addOneWayConnection(int源,int目标){

connections_[source]=&Node(source,weightedlist);您不想存储对它的引用。它在表达式之后不再存在。正如错误告诉您的那样,它是“临时的”。您应该直接存储节点,或者存储指针并使用
new
分配它们

编辑:从您的评论中,我注意到connections_uu实际上需要一个指针(正如我上面所说的那样),您需要分配新节点

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

连接是如何定义的?
你的解决方案很可能是摆脱&.std::map连接。你需要为你的
节点
源和目标分配一些明确的空间。临时对象适合复制或从中移动,但不适合获取引用或地址。别忘了提到它们必须有c精简代码以在完成时删除这些指针。否则将出现内存泄漏。