2015-08-16 3 views
1

Я знаю, что отладка кода других людей может расстраивать, но я действительно хочу узнать, что не так с моей. Это неполный график с множеством функций, которые еще не реализованы. Я дошел до этой стадии, и я уже застрял.Ошибка при кодировании класса графа в C++

Это график смежного списка. Он имеет вершины и ребра. У меня ошибка, которую я не могу понять. Можете ли вы объяснить, как произошла ошибка? Ошибка

C:\Users\jialee\Documents\CodeBlocks\ShortestPath\Graph.cpp: In constructor 'Edge::Edge(Vertex, Weight)': C:\Users\jialee\Documents\CodeBlocks\ShortestPath\Graph.cpp:34:33: error: no matching function for call to 'Vertex::Vertex()'

И код

#include <forward_list> 
#include <string> 

using namespace std; 

const int MAX_SIZE = 10000; 
typedef int Weight; 

class Vertex { 
public: 
    Vertex(string name, int num); 
    string city_name; 
    int city_num; 
}; 

class Edge{ 
public: 
    Edge(Vertex v, Weight w); 
    Vertex associated_vertex; 
    Weight weight; 
}; 

class Graph{ 
public: 
    Graph(int size); 
}; 

Vertex::Vertex(string name, int num){ 
    city_name = name; 
    city_num = num; 
} 

Edge::Edge(Vertex v, Weight cost){ 
    associated_vertex = v; 
    weight = cost; 
} 

Graph::Graph(int size = MAX_SIZE){ 
    forward_list<Edge> G[size]; 
} 

ответ

1

ошибка говорит, что вам не хватает конструктор по умолчанию (конструктор без аргументов) для Vertex, который необходим при строительстве края.
В основном, ваш конструктор краев пытается сначала инициализировать все элементы по умолчанию, а затем назначить переданные значения.

Вы можете добавить конструктор по умолчанию в класс вершины или (лучше) использовать списки инициализатора в ваших краях конструктора:

Edge::Edge(Vertex v, Weight cost): 
    associated_vertex{v}, 
    weight{cost} 
{ } 
+0

я узнал о списке инициализатора некоторого времени назад, но я совершенно забыл о многих C++ синтаксис. Благодарю. Кстати, мне жаль, что я не смог бы проголосовать за ваш ответ, но я не мог, поскольку я слишком новичок. Мое голосование поможет мне голосовать за других людей в будущем. Еще раз спасибо. – VequalsIR