Graphen-Klasse, Datei einlesen



  • Hallo,

    ich habe hier eine Graphen-Klasse gegeben, und möchte in einem Programm nun ein Objekt des Typs Graph erzeugen. Dazu soll, soweit ich das verstanden habe, beim Erzeugen eine Datei eingelesen werden, die den Graph in Form von Knoten und Kantenangaben enthält.

    Hier ein Ausschnitt aus dem Header-File:

    enum DirType {directed, undirected};
        Graph(NodeId num_nodes, const DirType direction = directed);
        Graph(char const* filename, const DirType direction = directed);
    

    Und hier ein Ausschnitt aus der Implementierung in der Graphen-Klasse:

    Graph::Graph(char const * filename, const DirType direction): _direction(direction)
    {
        std::ifstream file(filename);             // open file
        if (not file) {
            throw std::runtime_error("Cannot open file.");
        }
    
        Graph::NodeId num = 0;
        std::string line;
        std::getline(file, line);  
    ...
    

    Meine Frage: Ich möchte nun ein Objekt vom Typ Graph erzeugen, und habe eine Text-Datei, die meinen Graphen beschreibt. Das ganze müsste dann ja etwa so aussehen:

    Graph g ("filename", "direction");

    Frage: Das ist jetzt nur ein in etwa, aber ich weiß leider nicht, wie GENAU ich g erzeugt kriege. Dh. stimmt obige Zeile so? Was muss ich (genau) für "filename", für "direction" einsetzen? Angenommen, filename ist zb. kk und direction Desktop (oder sonst irgendwas, ein Beispiel wäre hier hilfreich).

    Hoffe mir kann da jemand weiterhelfen.

    Vielen Dank!!!!



  • zB:

    ...
    Graph g("kk", directed);
    ...
    

    wenn "kk" der Filename ist ...



  • okay, vielen dank!

    Kriege nun aber die Fehlermeldung beim Kompilieren: "error: 'directed' was not declared in this scope".



  • Da es vermutlich mehr Informationen bedarf, hier mein Quellcode:

    #include <iostream>
    #include "graph.h"
    
    using namespace std; 
    
    int main(int argc, char **argv)
    {
    
                        Graph g("kk", directed);
                        g.print();
    
        return 0;
    }
    


  • Ist DirType evtl. im Scope der Klasse definiert?
    Dann:

    Graph g("kk", Graph::directed);
    


  • danke, funktioniert jetzt!

    (mit "kk" liefs zunächst nicht, musste noch "kk.txt" draus machen, aber mehr nicht).

    Gleich kommen sicher aber noch ein bis zwei Fragen.



  • Er hat da ja auch Default-Paramter in der Funktion. Von daher sollte ein einfaches ...

    Graph g ("filename");
    

    ... auch tun. Zumindest solange der TE nur einen "directed" Graphen erzeugen will.


Log in to reply