2012-01-18 6 views
2

У меня возникли проблемы с кодом от boost graph library Dijkstra example. Я изменил его так, чтобы моя версия не использовала перечисления, а Letter скорее всего целые. Он жалуется на цикл for и функцию привязки, а также на другие тайные вызовы, за исключением первого.C++ Boost Graph Library - Dijkstra Пример

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 

Любая помощь была бы оценен, я действительно не знаю, о чем жалуется ошибка ...

ответ

4

Создана локальная переменная std::vector<int> vertices где-то в некотируемом коде?

+0

вершины являются частью импортированной библиотеки, std :: pair Jim

+0

Знаете ли вы что-нибудь еще, что это может быть? – Jim

+3

@ Jim: Я придерживаюсь своей первоначальной догадки. Кажется, вы изменили цитируемый код, и теперь я вижу 'vertices.size()', который, несомненно, поддерживает мою теорию. Вы затеняли функцию 'vertices()' с переменной 'vertices', класс которой (' std :: vector') не реализует 'operator()', что именно то, что вам сообщает об ошибке. –

Смежные вопросы