【发布时间】:2019-03-26 22:31:20
【问题描述】:
当在 adjacency_list 中为 VertexList 使用 boost::vecS 时, boost::depth_first_search(Graph, Visitor) 编译并正常工作。将 VertexList 类型切换为 boost::listS 时,我收到编译器错误:
boost_1_65_0\boost\graph\detail\adjacency_list.hpp(2545):错误 C2182:“const_reference”:非法使用类型“void”
从这个错误中我可以看出 boost::listS 不是一个有效的类型,但是 BOOST CONCEPT 检查通过了。
如果 boost::listS 不是 depth_first_search 的有效类型,为什么?
以下是演示该问题的示例代码。从 vecS 切换到 listS 会产生上述错误。我正在使用 Visual Studio 2017 并提升 1.65.0
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/graph/graph_concepts.hpp>
//typedef boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS> MyGraph;
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::bidirectionalS> MyGraph;
using VertexType = boost::graph_traits<MyGraph>::vertex_descriptor;
BOOST_CONCEPT_ASSERT((boost::VertexListGraphConcept<MyGraph>));
BOOST_CONCEPT_ASSERT((boost::IncidenceGraphConcept<MyGraph>));
class dfs_visitor : public boost::default_dfs_visitor
{
public:
void discover_vertex(VertexType u, const MyGraph& g) const
{
}
void finish_vertex(VertexType u, const MyGraph& g) const
{
}
};
BOOST_CONCEPT_ASSERT((boost::DFSVisitorConcept<dfs_visitor, MyGraph>));
int main()
{
MyGraph g;
dfs_visitor vis;
boost::depth_first_search(g, boost::visitor(vis));
return 0;
}
【问题讨论】:
-
另见faq #5
标签: c++ c++14 depth-first-search boost-graph