Grundlegende Frage zu constanten
-
Bei mir klappt folgendes ohne Probleme:
test.h
typedef short WORD; const WORD wsSetBits[16] = { 0x0001,0x0002,0x0004,0x0008, 0x0010,0x0020,0x0040,0x0080, 0x0100,0x0200,0x0400,0x0800, 0x1000,0x2000,0x4000,0x8000};
test.cpp
#include <iostream> #include "test.h" using namespace std; int main() { cout<<wsSetBits[0]<<endl; cin.get(); }
-
Hi,
folgender code ergibt diese meldung: BitSet.h(33) : error C2059: Syntaxfehler: '{'
em das ganze ist in einer class implimentiert
#pragma once class CBitSet { public: CBitSet(void); ~CBitSet(void); private: const WORD wSetBits[16] = {0x0001,0x0002,0x0004,0x0008, 0x0010,0x0020,0x0040,0x0080, 0x0100,0x0200,0x0400,0x0800, 0x1000,0x2000,0x4000,0x8000}; const WORD wResetBits[16] ={0xFFFE,0xFFFD,0xFFFB,0xFFF7, 0xFFEF,0xFFDF,0xFFBF,0xFF7F, 0xFEFF,0xFDFF,0xFBFF,0xF7FF, 0xEFFF,0xDFFF,0xBFFF,0x7FFF}; };
-
Dennis76 schrieb:
em das ganze ist in einer class implimentiert
Achso, dann kannst Du das so machen:
#pragma once class CBitSet { public: CBitSet(void); ~CBitSet(void); private: static const WORD wSetBits[]; static const WORD wResetBits[]; }; //folgendes kann auch in die cpp-Datei const WORD CBitSet::wSetBits[] = {0x0001,0x0002,0x0004,0x0008, 0x0010,0x0020,0x0040,0x0080, 0x0100,0x0200,0x0400,0x0800, 0x1000,0x2000,0x4000,0x8000}; const WORD CBitSet::wResetBits[] = {0xFFFE,0xFFFD,0xFFFB,0xFFF7, 0xFFEF,0xFFDF,0xFFBF,0xFF7F, 0xFEFF,0xFDFF,0xFBFF,0xF7FF, 0xEFFF,0xDFFF,0xBFFF,0x7FFF};
-
Achso, könntest du das evtl. etwas genauer erläutern?
Mfg
Dennis
-
nur integrale static konstanten dürfen innerhalb der klassendefinition definiert werden. was du hier hast ist ein array - dass muss dann ausserhalb (und nicht im header) definiert (und initialisiert) und in der klassendefinition nur deklariert werden, siehe obiges beispiel von nillable.
-
camper schrieb:
dass muss dann ausserhalb (und nicht im header) definiert (und initialisiert) und in der klassendefinition nur deklariert werden
Das kann auch in der header-Datei gemacht werden, aber muss ausserhalb der Klassendefinition stehen.
static const
deshalb, weil du wahrscheinlich willst, dass es für alle CBitSet-Instanzen const ist und nicht für jeweils eine. Member die einfach nur const sind müssen in der Initialisierungsliste des Konstruktors initialisiert werden.
-
nillable schrieb:
Das kann auch in der header-Datei gemacht werden, aber muss ausserhalb der Klassendefinition stehen.
falls diese klasse in mehr als einem modul verwendet wird, verletzt das aber die ODR und wird für gewöhnlich mit linkerfehlern bestraft.
-
Ok soweit so gut
Letzte Frage: was sind "integrale static konstanten"?
Mfg
Dennis76
-
Dennis76 schrieb:
Ok soweit so gut
Letzte Frage: was sind "integrale static konstanten"?
Mfg
Dennis76
static und konstant dürfte wohl klar sein
integral ist synonym für integer typen - also int, char, short, long (gegebenenfalls signed/unsigned), ausserdem bool und wchar_t.
ausserdem dürfen enums so initilisiert werden.
-
Ok alles klar herzlichen dank an alle Beteiligten!
Mfg
Dennis
P.S.
Ist der Thread nicht etwas für die FAQ?!