【发布时间】:2014-08-01 14:59:25
【问题描述】:
我正在尝试设置具有捆绑属性的顶点 Boost Graph。不幸的是,“add_edge”步骤似乎不起作用,导致以下错误。任何见解都会有所帮助!
error: constructor for 'boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Node,boost::no_property, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property, boost::no_property, boost::listS>::config::rand_stored_vertex'
must explicitly initialize the member 'm_property' which does not have a default constructor
rand_stored_vertex() { }
以及一系列其他此类声明,最终导致以下内容:
in instantiation of function template specialization 'boost::add_edge<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property,boost::no_property, boost::listS>, boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property, boost::no_property,boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property, boost::no_property, boost::listS>::config,boost::undirected_graph_helper<boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property, boost::no_property, boost::listS>,boost::vecS, boost::vecS, boost::undirectedS, Node, boost::no_property, boost::no_property, boost::listS>::config> >' requested here
boost::add_edge( svlist[0], svlist[1], SG );
class Node {
public:
std::string id;
Node(int a) {
id = std::to_string(a);
}
};
std::vector<Node> nodelist;
Node n1(1);
Node n2(2);
Node n3(3);
Node n4(4);
nodelist.push_back(n1);
nodelist.push_back(n2);
nodelist.push_back(n2);
nodelist.push_back(n4);
typedef boost::adjacency_list< boost::vecS, boost::vecS,
boost::undirectedS, Node> ScafGraph;
typedef boost::graph_traits<ScafGraph>::vertex_descriptor SV;
typedef boost::graph_traits<ScafGraph>::edge_descriptor SE;
ScafGraph SG;
std::vector<SV> svlist;
for(int i=0; i<4; i++) {
SV v = boost::add_vertex( nodelist[i], SG );
svlist.push_back(v);
}
SE e; bool ok;
boost::tie(e, ok) = boost::edge( svlist[0], svlist[1], SG );
if(!ok) {
boost::add_edge( svlist[0], svlist[1], SG );
}
【问题讨论】:
-
我不明白 "boost::tie ..." 行的作用。如果你把它注释掉会发生什么?
-
@ravenspoint boost::tie(e,ok) 调用用于检查在添加新边的过程中是否会发生任何错误(例如,当已经存在时)。谢谢。
标签: c++ boost boost-graph