Problem mit dyn. Feld



  • Folgendes Problem:

    Ich habe in einer Headerdatei folgenden Typen definiert:

    typedef int dyn_int_array_t;
    

    in meiner main.cpp eine Variable angelegt und übergebe diese an eine Funktion:

    dyn_int_array_t int_array;
    
    readPowersFromTextFile(Dateiname, [B]int_array[/B], Exp);
    

    nun möchte ich in der Funktion das dynamische Feld erzeugen:

    int readPowersFromTextFile(const char* filename, dyn_int_array_t& numbers, int& exp)
    {
    	numbers = new dyn_int_array_t[ ];
    }
    

    Nun erzeugt Letzteres folgenden Fehler:

    "error C2440: '=': 'dyn_int_array_t *' kann nicht in 'dyn_int_array_t' konvertiert werden"

    Wo steckt der Fehler?



  • Die Fehlermeldung sagt eigentlich alles. numbers ist vom Typ dyn_int_array_t (also int ), der Rückgabetyp von new ist jedoch dyn_int_array_t *, also ein Zeiger.



  • OK ..., was muss ich nun ändern um in der Funktion readPowersFromTextFile das Feld numbers zu erzeugen?



  • typedef int* dyn_int_array_t;
    


  • Naja, wie wärs wenn du einen Zeiger übergibst und keinen Adresse?



  • Wenn dann einen Doppelzeiger! 🙂 Aber mit dem angepassten Typedef dürft der Rest doch auch stimmen.



  • Wir wärs denn da gar nicht erst mit new und Zeigern anzufangen, sondern Container zu verwenden? 🙂



  • David_pb schrieb:

    typedef int* dyn_int_array_t;
    

    Der Fehler besteht leider weiterhin. 😞



  • dyn_int_array_t int_array;
    readPowersFromTextFile(Dateiname, [B]&int_array[/B], Exp);
    int readPowersFromTextFile(const char* filename, dyn_int_array_t *numbers, int& exp) { 
    numbers = new dyn_int_array_t[ ]; 
    }
    


  • oder, damit kein Speicherzugriffsfehler entsteht, int_array als Zeiger:

    dyn_int_array_t *int_array;
    readPowersFromTextFile(Dateiname, [B]int_array[/B], Exp);
    int readPowersFromTextFile(const char* filename, dyn_int_array_t *numbers, int& exp) { 
    numbers = new dyn_int_array_t[ ]; 
    }
    


  • u_ser-l schrieb:

    oder, damit kein Speicherzugriffsfehler entsteht, int_array als Zeiger:

    dyn_int_array_t *int_array;
    readPowersFromTextFile(Dateiname, [B]int_array[/B], Exp);
    int readPowersFromTextFile(const char* filename, dyn_int_array_t *numbers, int& exp) { 
    numbers = new dyn_int_array_t[ ]; 
    }
    

    Danke, das funktioniert so weit.

    So, in der Funktion readPowersFromTextFile fülle ich jetzt das neuerstellte Feld numbers und gehe wieder aus der Funktion raus. Damit sollte ja jetzt mein int_array gefüllt sein, wenn ich jetzt aber in meiner main.cpp auf das int_array zugreifen will meckert er rum das nicht drauf zugegriffen werden kann da es vorher nicht initialisiert wurde.

    Ich dachte das hätte ich gemacht, indem ich numbers erstellt habe oder sehe ich das falsch? (zumindestens sollte das der Sinn der Übung sein)


Anmelden zum Antworten