首先,一些简化的代码:
#ifndef UNDIRECTED_GRAPH_HPP
#define UNDIRECTED_GRAPH_HPP
#include <vector>
#include <iostream>
template <typename T>
struct undirected_graph
{
struct node
{
T data;
};
struct edge
{
node& node0;
node& node1;
};
~undirected_graph() {
for (auto n : nodes_) delete n;
for (auto e : edges_) delete e;
}
const node& add_new_node(const T& data);
private:
std::vector<node*> nodes_;
std::vector<edge*> edges_;
};
template <typename T>
const typename undirected_graph<T>::node&
undirected_graph<T>::add_new_node(const T& data)
{
node *n = new node { data };
nodes_.push_back(n);
for (auto x : nodes_) std::cout << x->data.pos.x << "," << x->data.pos.y << std::endl;
return *n;
}
#endif
该问题存在于中undirected_graph::add_new_node(const T& data)
。我将输出添加到控制台用于调试目的,因为到目前为止,我仅将此类与自己的数据类型一起使用。每次我调用此方法时,似乎nodes_
矢量中的先前条目都被更改为最后一个元素。
我认为这可能与我选择存储在图形中的数据类型有关,因此我还要添加调用它的代码部分:
// Somewhere in dungeon_generator.cpp ...
undirected_graph<const DungeonLayout::Room&> graph;
for (auto room : dungeon->rooms) {
graph.add_new_node(room);
}
所以我的方法有缺陷,或者我的调用方式有缺陷,或者两者都有。但我似乎无法找出问题所在!有人可以帮帮我吗?
为了进一步说明问题,我向该方法添加了两次调用的输出。所述dungeons_->rooms
容器包含一堆房间随机生成的位置(可以通过表示为pos
属性)
2,2
9,9
9,9
3,2
3,2
3,2
2,6
2,6
2,6
2,6
9,3
9,3
9,3
9,3
9,3
似乎您在存储对临时变量的引用room
。更改
undirected_graph<const DungeonLayout::Room&> graph;
至
undirected_graph<DungeonLayout::Room> graph;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句