Graph...und = überladen.



  • Hey...

    versuche mein Problem zu beschreiben.
    Also hab eine Klasse Graph(die jeweils eine Liste mit Knoten und Kanten enthält). Jetzt soll(muß) ich den = Operator überladen für zum Beispiel zwei Graph-Objekte g1=g2.

    Wenn ich in der main als Beispiel n=m mache, führt er mir die = Funktion aber nicht aus. Bringt aber auch keine Fehlermeldung beim kompilieren.
    Hier ein paar Auszüge aus der Klasse Graph:

    class Graph
    {
    public:

    Knoten *pFirstKnoten;
    Kante *pFirstKante;
    char *pName;

    Graph* operator=(Graph *&g2);//Prototyp...
    }

    Und hier die main und funktion dazu:

    void main
    {
    Graph *n=new Graph("GRAPH 3");
    n->addKnoten("A");
    Graph *m=new Graph("GRAPH 4");
    m->addKnoten("B");
    n=m;// Hier ruft er die operator funktion nicht auf.....
    }

    Graph* Graph::operator=(Graph *&g2)//Überladen des = Operators....
    {
    printf("Ausfuehrung des Zuweisungsoperators =");
    Graph *temp=new Graph(this->pName);
    temp->pName=this->pName;
    temp->pFirstKante=this->pFirstKante;
    temp->pFirstKnoten=this->pFirstKnoten;
    return temp;
    }

    Hoffe ich hab mein Problem irgendwie verständlich dargelegt...

    Sascha



  • Sehr aufschlussreich ist der Code aber nicht! 🙄



  • mir kommt vor da fehlt was!?

    [edit]verdammt! da war einer schneller ^^[/edit]



  • Erstens: Der Zuweisungsoperator sollte eine Referenz auf ein konstantes Graph-Objekt als Parameter erhalten, keine Referenz auf einen Zeiger.

    Zweitens: Man kann die Zuweisung nur für Klassen überladen. Nicht für primitive Typen, Zeiger eingeschlossen. Du weist aber in der main lediglich Zeiger einander zu.



  • Hab ja nicht den ganzen Code abgebildet....Will nur wissen warum er beim Aufruf n=m nicht die operator= funktion aufruft...?

    Sascha



  • Überlad mal mit Referenzen statt mit Zeigern.
    EDIT: Gähn, was war ich langsam.



  • Also sollte der Funktionskopf dann in etwas so aussehen ???

    Graph Graph::operator=(Graph &g2)
    {
    printf("Ausfuehrung des Zuweisungsoperators =");
    Graph *temp=new Graph(this->pName);
    temp->pName=this->pName;
    temp->pFirstKante=this->pFirstKante;
    temp->pFirstKnoten=this->pFirstKnoten;
    return temp;
    }



  • sasch schrieb:

    Also sollte der Funktionskopf dann in etwas so aussehen ???

    Ja, der Rest der Funktion ist allerdings nicht wirklich logisch, du solltest dir nochmal Gedanken machen was eigentlich der Sinn einer Zuweisung ist ... vielleicht auch mal in das eine oder andere C++-Buch reinschauen.


Anmelden zum Antworten