增加图形转换错误



我正在使用boost库创建一个简单的图形,并尝试迭代顶点和边缘。但是我收到以下错误,其中代码可以迭代所有顶点,但是当我添加负责迭代边缘的最后一段代码时存在编译问题:

错误:从"标准::p空气、助推器::d尾巴::out_edge_iter>、长无符号整数、助推器::d尾音::edge_desc_impl、长内>、助推::adjacency_list>、助推器::d尾部::adj_list_edge_iterator、助推器::d尾音::out_edge_iter>、长无符号整数、助推器::d尾音::edge_desc_impl、长整型>、助推器::adjacency_list>>"转换为非标量类型"std::p air,助推器::d尾音::out_edge_iter<__gnu_cxx::__normal_iterator*, 标准::矢量, 标准::分配器>>>, 长无符号整数, 提升::d尾巴::edge_desc_impl, 长整数>, 提升::adjacency_list<>>, 提升::d尾巴::adj_list_edge_iterator, 提升::d尾巴::out_edge_iter<__gnu_cxx::__normal_iterator*, 标准::矢量, 标准::分配器>>>, 长无符号整数, 提升::d尾巴::edge_desc_impl, 长整>, 提升::adjacency_list<>>>' 请求 boost::adjacency_list<>::edge_iterator> es = boost::edges(g(;

这是我的代码

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
int main()
{
using namespace std;
using namespace boost;
typedef adjacency_list< listS, vecS, directedS > digraph;
// instantiate a digraph object with 8 vertices
digraph g(8);
// add some edges
add_edge(0, 1, g);
add_edge(1, 5, g);
add_edge(5, 6, g);
add_edge(2, 3, g);
add_edge(2, 4, g);
add_edge(3, 5, g);
add_edge(4, 5, g);
add_edge(5, 7, g);
// represent graph in DOT format and send to cout
write_graphviz(cout, g);

std::cout<< "+++++++++++++++++++++++++++++++++++++n";
std::cout<<"Print Verticesn";
std::pair<boost::adjacency_list<>::vertex_iterator,
boost::adjacency_list<>::vertex_iterator> vs = boost::vertices(g);
std::copy(vs.first, vs.second,std::ostream_iterator<boost::adjacency_list<>::vertex_descriptor>{
std::cout, "n"});

std::cout<< "+++++++++++++++++++++++++++++++++++++n";
std::cout<<"Print Edgesn";
std::pair<boost::adjacency_list<>::edge_iterator,
boost::adjacency_list<>::edge_iterator> es = boost::edges(g);
std::copy(es.first, es.second,std::ostream_iterator<boost::adjacency_list<>::edge_descriptor>{
std::cout, "n"});
return 0;
}

您正在将edges的结果分配给不兼容类型的变量。而不是

std::pair<boost::adjacency_list<>::edge_iterator,
boost::adjacency_list<>::edge_iterator> es = boost::edges(g);

auto es = boost::edges(g);

std::pair<digraph::edge_iterator, digraph::edge_iterator> es = boost::edges(g);

更多详细信息:您的类型digraphadjacency_list指定了三个模板参数:

typedef adjacency_list< listS, vecS, directedS > digraph;

您可以使用此类型的参数调用edges,但指定函数的EdgeIterator模板参数必须boost::adjacency_list<>::edge_iterator,就好像g的类型是adjacency_list<>而不是adjacency_list<listS, vecS, directedS>一样。显然,转换对adjacency_list<>::vertex_iterator有效,但对adjacency_list<>::edge_iterator无效。

最新更新