Осваиваю библиотеку.
Почему этот код НЕ компилируется???
#define BOOST_GRAPH_USE_SPIRIT_PARSER
#include <boost/graph/directed_graph.hpp>
#include <boost/graph/tiernan_all_cycles.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/graphviz.hpp>
void DBG_tiernan_all_cycles(std::istream &i, std::ostream &o)
{
{
typedef boost::directed_graph<> graph_t;
typedef boost::graph_traits<graph_t>::vertex_descriptor vertex_t; //<<comment it
typedef boost::graph_traits<graph_t>::edge_descriptor edge_t; //<<comment it
graph_t g;
boost::dynamic_properties dp;
boost::read_graphviz(i, g, dp, "node_id");
}
}
int main()
{
DBG_tiernan_all_cycles(std::ifstream("t:\\ids_set.gv"), std::ofstream("t:\\ids_all_cycles.gv"));
return 0;
}
В таком виде как я его привел он компилируется!
Но если закоментировать
ОБЕ строчки после которых стит коментарий //<<comment it
Код компилироваться перестает: error C2872: 'detail': ambiguous symbol
Если только одну из них, неважно какую, то код будет компилироваться.
Что это за мистика???
Онлайн компилятор:
http://rextester.com/KFOI67722
Здравствуйте, nen777w, Вы писали:
N>Что это за мистика???
N>Онлайн компилятор: http://rextester.com/KFOI67722
чую, что они облажались в файле boost\graph\detail\read_graphviz_spirit.hpp
template <typename MultiPassIterator, typename MutableGraph>
bool read_graphviz_spirit(MultiPassIterator begin, MultiPassIterator end,
MutableGraph& graph, dynamic_properties& dp,
std::string const& node_id = "node_id") {
using namespace boost;
using namespace boost::spirit::classic; //remove using
typedef MultiPassIterator iterator_t;
typedef skip_parser_iteration_policy< boost::detail::graph::dot_skipper>
iter_policy_t;
typedef scanner_policies<iter_policy_t> scanner_policies_t;
typedef scanner<iterator_t, scanner_policies_t> scanner_t;
::boost::detail::graph::mutate_graph_impl<MutableGraph>
m_graph(graph, dp, node_id);
либо в файле boost\graph\graph_traits.hpp
#define BOOST_GRAPH_PULL_OPT_MEMBER(name) \
typedef typename detail::BOOST_JOIN(get_opt_member_, name)<G>::type name; //add ::boost::