C++ VERTEX und EDGE-Klassen funktionieren nicht
Machte ich die Klasse vertex
und Edge
für ein Diagramm, aber ich verstehe nicht, warum die Edge
's Methoden GetVer1()
und GetVer2()
funktionieren nicht! Ich muss arbeiten mit dem Zeiger auf die Eckpunkte für mein Projekt. Könnte mir jemand helfen?
Vertex
code:
typedef class vertex *Vertex;
class vertex {
private:
int Key;
list<Vertex> Adj;
public:
vertex() {}
vertex(int k) { Key = k }
~vertex() {}
void AddAdj(Vertex);
int GetKey();
};
void vertex::AddAdj(Vertex v)
{
Adj.push_back(v);
}
int vertex::GetKey()
{
return Key;
}
Edge
code:
class Edge {
private:
Vertex V1;
Vertex V2;
public:
Edge() {}
~Edge() {}
Edge(Vertex, Vertex);
Vertex GetVer1();
Vertex GetVer2();
};
Edge::Edge(Vertex a, Vertex b)
{
V1 = a;
V2 = b;
}
Vertex Edge::GetVer1()
{
return V1;
}
Vertex Edge::GetVer2()
{
return V2;
}
Main
code:
int main()
{
Vertex a(1);
Vertex b(2);
Edge e(a,b);
Vertex v1 = e.GetVer1();
cout << v1->GetKey(); //it doesn't work!
return 0;
}
- Wie genau arbeiten Sie nicht? Welche Ergebnisse konnten Sie erwarten, und welche Ergebnisse haben Sie erhalten? Bitte geben Sie diese Informationen in Ihre Frage.
- Sie sind nicht die Definition v1.
Vertex v1 = e.GetVer1();
- Es einfach abstürzt! Ja ich v1, die ich nur vergessen zu kopieren.
- Was genau ist die Fehlermeldung, wenn es abstürzt. Haben Sie einen debugger, um festzustellen, wo es abstürzt?
typedef class vertex *Vertex;
ist im besten Fall verwirrend und im schlimmsten Fall eine Katastrophe warten, um zu geschehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich zwei Probleme.
Erste,
sollte
Zweite, mit den Linien
Sie versuchen, rufen Sie die
Vertex
Konstruktor mit integer-Argumenten. AberVertex
ist definiert als ein Zeiger auf einevertex
. Als solche, es gibt keine entsprechenden Konstruktor. Mein compiler gibt einen Fehler, auf diesen Linien, aber es klingt wie das Ihre kann die Initialisierung der Zeiger auf die Adressen 1 und 2, die mit an Sicherheit grenzender Wahrscheinlichkeit den Absturz verursachen.Ändern main:
arbeiten. Aber, wie bereits in den Kommentaren, die Verwendung des
Vertex
typedef als Zeiger auf einevertex
ist ziemlich verwirrend.Nicht unnötig Typdefinitionen wie diese:
Es ist nicht nur verwirrend, da bcrist wies darauf hin, es ist die Quelle Ihrer Probleme. Sie deklariert zwei "Objekt-Suche" Dinge wie diese, und ging dann, als ob Sie Objekte, wenn Sie nicht:
Diese sind eigentlich Zeiger und damit die noch nicht initialisiert sind. Aber auf die schnelle Hingucker, Sie sehen aus wie Objekte. Es kostet nichts, um tatsächlich zu sagen, dass ein Zeiger verwendet wird:
Nun ist es klar, das man zwar Zeiger und Sie müssen auf eine gültige Instanz von vertex, bevor Sie Sie verwenden.