BYTE-Deklarierung



  • Alóha,
    er meckert bei einer BYTE-Deklarierung rum:

    class Heightmap
    { 
     private:
    	static const int   MAP_SIZE; 
    	static const int   STEP_SIZE;       
    	static const float HEIGHT_RATIO; 
    	BYTE g_Heightmap[MAP_SIZE]; //Hier meckert er rum
    
     public:
    	 int  Height(BYTE *pHeightMap, int X, int Y);
    	 void SetTextureCoords(int x, int z);
    	 void LoadRAW(const char *Filename, int Size, BYTE *pHeightmap);
    	 void RenderHeightmap(BYTE pHeightmap[]);
    };
    

    Woran liegt das?
    Fehlermeldung:

    error C2057: Konstanter Ausdruck erwartet
    

    Weiss auch nicht was mit "Konstanter Ausdruck erwartet" gemeint ist.

    Vielen Dank im Voraus! 😋


  • Administrator

    Er meckert nicht über BYTE sondern über MAP_SIZE . MAP_SIZE ist kein konstanter Ausdruck, sondern variabel. Das ist nicht erlaubt.
    Wenn du ein Array mit zur Laufzeit variabler Länge willst, musst du es über den Heap allokieren oder einen std::vector nehmen.

    Edit: Na toll, hast das const noch rein getan gerade oder bin ich wirklich so blind?
    Wie auch immer, wenn die Definition der integralen Konstante nicht in der Klasse erfolgt, so geht es auch nicht.

    Grüssli



  • Dravere schrieb:

    Er meckert nicht über BYTE sondern über MAP_SIZE . MAP_SIZE ist kein konstanter Ausdruck, sondern variabel.

    Ne, ist nicht variabel, ist ja schließlich const 🙂 Der Compiler muss aber an der Stelle der Array-Deklaration die Größe kennen - zum Glück kann man aber integrale statische konstante Variablen "inline" deklarieren:

    class Heightmap
    {
     private:
        static const int   MAP_SIZE = 50;
        ...
        BYTE g_Heightmap[MAP_SIZE]; // Geht jetzt
    

  • Administrator

    @Badestrand,
    Siehe mein Edit. Anscheinend hat way noch etwas am Code rumgepfuscht oder ich erblinde gerade 🙂

    Grüssli



  • Hey,
    entschuldigt mich, wenn ich eingeloggt bin dauert es ca. 15 min. eine Seite zu laden.

    Nein, ich hatte im Code nichts verändert, dass 'const' stand schon da, dass was ich verändert hatte war der Kommentar.
    Danke, läuft, cu.


Anmelden zum Antworten