const durch Funktion initialisieren



  • Hallo

    Um einen Array anzulegen, brauche ich eien Const Value.
    wenn ich nun eine const variable verwende, die ich mir aus einer Funktion hole, motzt der compiler dies sei keine const expression.
    gebe ich direkt einen wert: const long lMyl = 8; funktioniert alles.
    kleiner test in dem ich der variablen einen neuen Wert zuzuweisen versuche, zeigt mir aber das trotzdem const??? Wo liegt mein Problem?

    long Getl ()
    {
    return 8;
    }
    void myFunk()
    {
    const long lMyl = Getl();

    long lArray[lMyl]; //error C2057: expected constant expression
    //error C2466: cannot allocate an array of constant size 0
    //error C2133: 'lArray' : unknown size

    lMyl = 86; //error C2166: l-value specifies const object
    }

    PS: die funtion Getl() liest in Wirklichkeit aus einem ini-file

    Besten Dank für eure Hilfe
    Seeb



  • http://tutorial.schornboeck.net/arrays.htm

    alternative std::vector oder std::list usw



  • miller_m schrieb:

    http://tutorial.schornboeck.net/arrays.htm

    alternative std::vector oder std::list usw

    Lustiger Kerl. Der Link hat keinerlei Lösung für sein Problem. Hast du den Beitrag überhaupt gelesen?



  • idiot schrieb:

    miller_m schrieb:

    http://tutorial.schornboeck.net/arrays.htm

    alternative std::vector oder std::list usw

    Lustiger Kerl. Der Link hat keinerlei Lösung für sein Problem. Hast du den Beitrag überhaupt gelesen?

    ja hab ich.
    ne "klicki lösung ich kann programmieren" gibt es natürlich nicht. 😃



  • Gemäss Schornboeck brauche ich eine Compiletime Konstante, habe aber nur eine Runtime Konstante! Wie kann ich den Compiler 'verarschen'?



  • Seeb schrieb:

    Hallo

    Um einen Array anzulegen, brauche ich eien Const Value.
    wenn ich nun eine const variable verwende, die ich mir aus einer Funktion hole, motzt der compiler dies sei keine const expression.
    gebe ich direkt einen wert: const long lMyl = 8; funktioniert alles.
    kleiner test in dem ich der variablen einen neuen Wert zuzuweisen versuche, zeigt mir aber das trotzdem const??? Wo liegt mein Problem?

    long Getl ()
    {
    return 8;
    }
    void myFunk()
    {
    const long lMyl = 0; // Dummy-Wert
    void* ptr=&lMyl; // void* kann beliebige Adressen speichern
    long* njet=(long*) ptr; // Explizite Konvertierung von
    // (void*) in (long*)

    *njet=Getl(); // Jetzt schreiben wir 8 in den Speicherbereich von lMyl

    // Überprüfung
    cout << lMyl; // und tatsächlich steht jetzt am Speicherort von lMyl
    // nicht mehr der Dummy-Wert 0 sondern 8;
    // aber warum dann eigentlich lMyl als const definieren??
    // const weglassen und Codezeilen sparen!

    long lArray[lMyl]; //error C2057: expected constant expression
    //error C2466: cannot allocate an array of constant size 0
    //error C2133: 'lArray' : unknown size

    lMyl = 86; //error C2166: l-value specifies const object
    }

    PS: die funtion Getl() liest in Wirklichkeit aus einem ini-file

    Besten Dank für eure Hilfe
    Seeb



  • Gar nicht.

    Du musst halt ein dynamisches Array erstellen:

    long Getl ()
    { 
      return 8;
    }
    
    void myFunk()
    {
      const long lMyl = Getl();
    
      long *lArray = new long[lMyl]; 
    
      // lArray verwenden
    
      delete[] lArray;
    }
    


  • Flussbarsch schrieb:

    Seeb schrieb:

    Hallo

    Um einen Array anzulegen, brauche ich eien Const Value.
    wenn ich nun eine const variable verwende, die ich mir aus einer Funktion hole, motzt der compiler dies sei keine const expression.
    gebe ich direkt einen wert: const long lMyl = 8; funktioniert alles.
    kleiner test in dem ich der variablen einen neuen Wert zuzuweisen versuche, zeigt mir aber das trotzdem const??? Wo liegt mein Problem?

    long Getl ()
    {
    return 8;
    }
    void myFunk()
    {
    const long lMyl = 0; // Dummy-Wert
    void* ptr=&lMyl; // void* kann beliebige Adressen speichern
    long* njet=(long*) ptr; // Explizite Konvertierung von
    // (void*) in (long*)

    *njet=Getl(); // Jetzt schreiben wir 8 in den Speicherbereich von lMyl

    // Überprüfung
    cout << lMyl; // und tatsächlich steht jetzt am Speicherort von lMyl
    // nicht mehr der Dummy-Wert 0 sondern 8;
    // aber warum dann eigentlich lMyl als const definieren??
    // const weglassen und Codezeilen sparen!

    long lArray[lMyl]; //error C2057: expected constant expression
    //error C2466: cannot allocate an array of constant size 0
    //error C2133: 'lArray' : unknown size

    lMyl = 86; //error C2166: l-value specifies const object
    }

    PS: die funtion Getl() liest in Wirklichkeit aus einem ini-file

    Besten Dank für eure Hilfe
    Seeb

    @Flussbarsch:
    Das funktioniert genauso wenig.



  • Seeb schrieb:

    Gemäss Schornboeck brauche ich eine Compiletime Konstante, habe aber nur eine Runtime Konstante! Wie kann ich den Compiler 'verarschen'?

    Wenn du einen Wert zur Laufzeit ändern willst ist es keine Konstante mehr. 😃
    Ein Array braucht einen Konstante zur Grössenfestlegung =>
    so wie geplant geht nicht !!

    Alternativen:
    - Dynamischer Array: z.B. char* = new char["limit"];
    - STL-Container: z.B. vector<...>



  • Seeb schrieb:

    Gemäss Schornboeck brauche ich eine Compiletime Konstante, habe aber nur eine Runtime Konstante! Wie kann ich den Compiler 'verarschen'?

    Du kannst soviel probieren wie du willst, deinen Compiler wirst du aber nicht vera****** können. 😉
    Wie Redhead schon sagte, wenn du einen Wert zur Laufzeit änderst, ist es keine Konstante mehr. Dann beudeutet const nämlich nur 'konstant', dh der Wert ist read-only. Du kannst damit aber keine Compilezeit Ausdrücke auflösen.


Anmelden zum Antworten