Array variabler Größe



  • Ich muß mit einem Array arbeiten, dessen Größe erst in der Laufzeit festgelegt wird.
    Zur Probe habe ich den Codeschnipsel

    int m = 4;
    double b[m];

    for (int i = 0;i<m;i++)
    {
    b[i] = 1.0;
    }

    getestet. In DevC++ läuft es einwandfrei, aber nicht in VisualStudio2005. Dort kommen für die Zeile double b[m] die Fehlermeldungen

    - konstanter Ausdruck erwartet
    - Zuordnung eines Arrays konstanter Größe 0 nicht erlaubt
    - b unbekannte Größe

    Ich kann nicht verstehen, warum es in DevC++ geht und in VisualStudio nicht.

    Kann mir jemand helfen, da ich VisualStudio benutzen muß.
    Mit vielen Dank im voraus
    pepe-je



  • pepe-je schrieb:

    ...warum es in DevC++ geht und in VisualStudio nicht....

    Vielleicht DevC++ unterstützt unstandardisierte Zusatzfeatures.

    Eigentlich sollte das so auch nicht funktionieren (bzw. nur in ganz bestimmten Situationen mit dem 99er-C-Standard (jedenfalls NICHT unter C++)).

    pepe-je schrieb:

    Ich muß mit einem Array arbeiten, dessen Größe erst in der Laufzeit festgelegt wird....

    Dann arbeite mit std::vector .... das tut's immer und überall und ist sicher.

    Gruß,

    Simon2.



  • Ist eine Erweiterung des G++, und darauf basiert doch DevC++, oder?

    int m = 4;
    std::vector<double>(m, 1.0); // größe m mit default-belegung 1.0
    

    und fertig!



  • Danke für Eure Hinweise, aber ich befürchte, ich habe was nicht richtig gemacht.
    Bei mir kommt die Meldung "vector ist kein Element von std"
    Könnt Ihr bitte mal im Einzelnen schreiben, was anstelle von double b[m] zu setzen ist?
    Danke
    pepe-je



  • Hoi,

    du musst noch

    #include <vector>
    

    hinschreiben



  • Hallo, es hat geklappt, vielen Dank!!
    Nun entseht gleich die nächste Frage, denn ich habe mit der Klasse vector noch gar keine Erfahrung.
    Die Komponenten des Vektors sollen als Parameter einer Funktion dienen. Wie schreibt man das?
    Mit Arrays geht es ja so
    void function (double b[])
    Was kommt in die Klammer, wenn mit vector gearbeitet wird?
    Könnt Ihr mir nochmal helfen?



  • Du kannst eine Kopie übergeben:

    void foo (std::vector<double> data);
    

    , aber ob du das willst ... nein 😉 das ist sehr unperformant. Guck dir mal Referenzen und das Schlüsselwort "const" an 😉


Anmelden zum Antworten