2015-08-16 2 views
1

Je sais que le débogage du code d'autres personnes peut être frustrant, mais je veux vraiment savoir ce qui ne va pas chez moi. C'est un graphe incomplet avec beaucoup de fonctions non encore implémentées. Je suis arrivé à ce stade et je me suis déjà coincé.Erreur lors du codage d'une classe graphique en C++

C'est un graphique de la liste adjacente. Il a des sommets et des arêtes. J'ai une erreur que je ne peux pas comprendre. Pouvez-vous expliquer comment l'erreur est survenue? L'erreur est

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()'

Et le code est

#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]; 
} 

Répondre

1

L'erreur indique que vous manque un constructeur par défaut (constructeur sans argument) pour Vertex, qui est nécessaire lors de la construction de bord.
Fondamentalement, votre constructeur de bord essaie d'initialiser par défaut tous les membres, puis d'assigner les valeurs passées.

Vous pouvez ajouter un constructeur par défaut à votre classe de sommet ou (mieux) utiliser des listes de initialiseur dans votre constructeur de bord:

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

j'appris sur la liste initialiseur il y a un certain temps, mais je suis totalement oublié de beaucoup de C++ syntaxe. Merci. En passant, j'aimerais pouvoir voter pour votre réponse, mais je ne pourrais pas le faire car je suis trop nouveau. Un vote positif m'aidera à voter pour d'autres personnes à l'avenir. Merci encore. – VequalsIR