Ошибка при кодировании класса графа в переполнении стека

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

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

C: \ Users \ jialee \ Documents \ CodeBlocks \ ShortestPath \ Graph.cpp: In
конструктор ‘Edge :: Edge (Vertex, Weight)’:
C: \ Users \ jialee \ Documents \ CodeBlocks \ ShortestPath \ Graph.cpp: 34: 33:
ошибка: нет соответствующей функции для вызова ‘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}
{ }
1

Другие решения


По вопросам рекламы [email protected]