Grundlegende Frage zu constanten
-
Hallo,
leider hat die suchfunktion mir bei diesem Problem nicht wirklich weitergeholfen, ich hoffe ihr könnt dies.
Ich habe folgenden Delphi code den ich in c++ umsetzen muss.
CONST SetBits : ARRAY[0..15] OF WORD = ( $0001,$0002,$0003,$0004, $0010,$0020,$0030,$0040, $0100,$0200,$0300,$0400, $1000,$2000,$300,$4000 );
Meine cpp implimentation sah so aus (klappt aber nicht)
const WORD wsSetBits[16] = { 0x0001,0x0002,0x0004,0x0008, 0x0010,0x0020,0x0040,0x0080, 0x0100,0x0200,0x0400,0x0800, 0x1000,0x2000,0x4000,0x8000 };
hoffe ihr könnt mir da helfen!
-
Dennis76 schrieb:
hoffe ihr könnt mir da helfen!
Hoffe, du kannst den Fehler auch noch etwas genauer als "klappt aber nicht" beschreiben.
-
Sicherlich
hier die Fehlerausgabe:
BitSet.h(33) : error C2059: Syntaxfehler: '{'
BitSet.h(33) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionstext wird übersprungen
BitSet.h(39) : error C2059: Syntaxfehler: '{'
BitSet.h(39) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionstext wird übersprungen
BitSet.cpp(53) : error C2065: 'wsSetBits': nichtdeklarierter Bezeichner
BitSet.cpp(69) : error C2065: 'wsResetBits': nichtdeklarierter Bezeichner
BitSet.cpp(108) : error C3861: 'wsSetBits': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
BitSet.cpp(124) : error C3861: 'wsSetBits': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
-
vermutlich entweder
#include <windows.h>
oder WORD selber definieren
-
Huhu,
es ist ja nicht so als ob WORD nicht definiert ist.
ich denke es hat etwas damit zutun das das nicht in die Header-Datei gehört
-
Bist Du Dier da 100% sicher? Was passiert wenn Du statt WORD mal int oder short schreibst?
-
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?!