int anArray[const int]



  • Hallo !

    class meineKlasse
    {
      ...
      const int m_nArraySize;
      ...
    }
    
    // Konstruktor Version 1
    // Fehlermeldung das Konstanter Wert erwartet wird
    void meineKlasse::meineKlasse(int unwichtig)
    :m_nArraySize(42) //const int muss als Initialisirungsliste zugewiesen werden
    {
      int myTempArray[m_nArraySize];
    }
    
    //Diese Version funktioniert komischerweise
    void meineKlasse::meineKlasse(int unwichtig)
    {
      const int groesse = 42;
      int myTempArray[groesse];
    }
    

    Die Konstante m_nArraySize wird sehr oft benutzt, deshalb als Member. Warum funktioniert es wie im Konstruktor 1 nicht ?

    Compiler VC++ 6.0

    Vielen Dank für Deine Antwort !



  • Ich würde behaupten weil m_nArraySize keine Compile-Time Konstante ist (kann mich aber irren). Folgendes ist erlaubt und funktioniert mit vernünftigen Compilern auch:

    class X {
      static const int len = 12;
      X(void);
    };
    
    X::X(void)
    {
      int a[len];
    }
    


  • Das war der richtige Hinweis.
    Wenn man es sieht, erinnert man sich wieder daran, wie es ging. 😃

    Vielen Dank gnädiger Herr !

    //Im Header:
    class meineKlasse
    {
     private:
     static const int m_nSize;
    }
    
    //In der Cpp Datei:
    const int meineKlasse::m_nSize = 42;
    
    void meineKlasse::meineKlasse(int unwichtig)
    {
      int myTempArray[m_nArraySize];
    }
    


  • Deniz schrieb:

    //In der Cpp Datei:
    const int meineKlasse::m_nSize = 42;
    

    Konstanten kannst du übrigens auch direkt in der Headerdatei definieren ohne eine ODR Verletzung zu riskieren.


Anmelden zum Antworten