1

boost::graph ヘッダー ライブラリを試していますが、まだグラフに頂点を追加できません。

add_vertex 関数の使用方法は次のとおりです。

void GraphManager::addToGraph(VertexProperties node){

    //no error, but i do not need it
    vertex_t v = boost::add_vertex(graph);

    //compilation error
    vertex_t v = boost::add_vertex(node, graph);

    /*...*/
}

私の定義はここにあります:

#ifndef GRAPH_DEFINITION_H
#define GRAPH_DEFINITION_H

#include <boost/graph/adjacency_list.hpp>
#include "matchedword.h"

typedef MatchedWord* VertexProperties;

struct EdgeProperties
{
   int distance;
   EdgeProperties() : distance(0) {}
   EdgeProperties(int d) : distance(d) {}
};

struct GraphProperties {

};

typedef boost::adjacency_list<
   boost::vecS, boost::vecS, boost::undirectedS,
   boost::property<VertexProperties, boost::vertex_bundle_t>,
   boost::property<EdgeProperties, boost::edge_bundle_t>,
   boost::property<GraphProperties, boost::graph_bundle_t>
> Graph;

typedef boost::graph_traits<Graph>::vertex_descriptor vertex_t;
typedef boost::graph_traits<Graph>::edge_descriptor edge_t;


#endif // GRAPH_DEFINITION_H

何か案が ?ありがとう。

エラー: 'add_vertex(MatchedWord*&, Graph&)' の呼び出しに一致する関数がありません 候補は: [...] template typename Config::vertex_descriptor boost::add_vertex(const typename Config::vertex_property_type&, boost::adj_list_impl&)

注: テンプレート引数の控除/置換に失敗しました:

注: 'Graph {aka boost::adjacency_list, boost::property, boost::property >}'は 'boost::adj_list_impl' から派生したものではありません

このエラー出力の意味がわかりません。

4

2 に答える 2

1

Ravenspoint さん、その通りです。バンドル プロパティを悪用しただけです。

これが私のコードです。これは現在動作しています:)

#ifndef GRAPH_DEFINITION_H
#define GRAPH_DEFINITION_H

#include <boost/graph/adjacency_list.hpp>
#include "matchedword.h"

struct VertexProperties {
public :
    MatchedWord* matchedWord;
};

struct EdgeProperties
{
   int distance;
   EdgeProperties() : distance(0) {}
   EdgeProperties(int d) : distance(d) {}
};

struct GraphProperties {

};

typedef boost::adjacency_list<
   boost::vecS, boost::vecS, boost::undirectedS,
   VertexProperties,
   EdgeProperties,
   GraphProperties
> Graph;

typedef boost::graph_traits<Graph>::vertex_descriptor vertex_t;
typedef boost::graph_traits<Graph>::edge_descriptor edge_t;


#endif // GRAPH_DEFINITION_H

呼び出される関数 (後で定義を書き直すかもしれません) は次のとおりです。

void GraphManager::addToGraph(VertexProperties node){
    vertex_t v = boost::add_vertex(graph);
    graph[v].matchedWord = node.matchedWord;
}

回答ありがとうございます。

于 2013-07-14T08:36:01.700 に答える