2
コードに問題があります。boost graph library Dijkstra exampleです。私はそれを変更して、私のバージョンではenumとLetterを使用せず、整数だけではありません。それはforループとtie関数だけでなく、最初の呼び出しを除く他のtie呼び出しについても不平を言っています。C++ブーストグラフライブラリ - ダイクストラ例
Declerations:
typedef std::pair<int, int> Edge;
const int num_edges = num_edge;
Edge edge_array[num_edges];
int weights[num_edges];
int size = 0;
for(itora = edges.begin(); itora != edges.end(); ++itora){
int u = *itora;
++itora;
int v = *itora;
++itora;
weights[size] = *itora;
edge_array[size] = Edge(u,v);
size++;
}
graph_traits<graph_t>::vertex_iterator i, iend;
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
graph_t g(vertices.size());
property_map<graph_t, edge_weight_t>::type weightmap = get(edge_weight, g);
std::vector<vertex_descriptor> msvc_vertices;
for (boost::tie(i, iend) = vertices(g); i != iend; ++i){
msvc_vertices.push_back(*i);
}
for (std::size_t j = 0; j < num_edges; ++j) {
edge_descriptor e; bool inserted;
boost::tie(e, inserted) = add_edge(msvc_vertices[edge_array[j].first],
msvc_vertices[edge_array[j].second], g);
weightmap[e] = weights[j];
}
が壊れない:
for (boost::tie(i, iend) = vertices(g); i != iend; ++i){
msvc_vertices.push_back(*i);
}
この部分が破断する:ここで
graph_traits<graph_t>::vertex_iterator xi, xiend;
for (boost::tie(xi, xiend) = vertices(g); xi != xiend; ++xi) {
indexmap[*xi] = c;
name[*xi] = '0' + c;
c++;
}
は誤りです:
x.cc: In function 'int main(int, char**)':
x.cc:141: error: no match for call to '(std::vector<int, std::allocator<int> >) (main(int, char**)::graph_t&)'
gmake: *** [x.o] Error 1
何か助けていただければ幸いです。
verticesはインポートされたライブラリの一部です。std :: pair –
Jim
他に何かできることは分かりますか? – Jim
@ジム:私は私の元々の推測に固執する。あなたは引用符で囲まれたコードを変更したようですが、今は私の理論を支持していると思われる 'vertices.size()'を見ています。関数 'vertices()'に、クラス 'std :: vector'が' operator() 'を実装していない変数' vertices'を使って影を付けました。 –