static const Variable im Header -> Nutzung in WriteFile
-
Moin Gemeinschaft,
da ja globale Variablen nicht empfehlenswert sind, versuche ich mich bei meiner Arbeit danach zu richten. Daher deklariere ich wennimmer möglich Variablen im private-Bereich von verwendeten Klassen. Nun habe ich ein Programm vorliegen, in dem eine globale Variable
unsigned char schreibe_Bestätigung= 0xHH; // Beispieldeklariert und initialisiert ist. Diese wird in der WinAPI-Funktion(?)
WriteFile(.., &schreibe_Bestätigung,..,..,..);genutzt. Leider darf ich ja dort keinen Wert direkt einsetzen. Nun dachte ich mir: "muss ja nich global sein!" und hab die Variable in den Header geschoben - gleich als erste Codezeile der Klasse:
static const char Bestätigung= 0xHH;. Soweit hat der Compiler auch mitgespielt, also ist die Konstante schonmal korrekt deklariert und initialisiert, right?
Wenn ich nun in WriteFile() &Bestätigung einsetze, sagt der Compiler:
[C++Fehler] XYZ.cpp(187): Internal code generator error.
Die Hilfe beschreibt mir WriteFile so:
BOOL WriteFile( HANDLE hFile, // ... LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // ... LPDWORD lpNumberOfBytesWritten, // ... LPOVERLAPPED lpOverlapped // ... );Was mache ich falsch? Wie kann ich die Konstante nun korrekt an die Funktion übergeben? Brauche ich einen const-Zeiger statt der const-Variablen? Wenn ja, wie müsste der aussehen? Oder kann ich const in dieser Form nicht dafür nutzen? Wenn nicht, warum nicht?
MfG
-
Hallo,
Ein unsigned char ist doch etwas klein um als Puffer zu wirken (nur ein char). Statische Variablen müssen noch definiert werden. Du müsstest also irgendwo in deiner cpp sowas stehen haben.
static const char TForm1::Bestätigung = 0xee; //BeispielDie Initialisierung muss dafür aus dem header raus.
Warum nimmst du überhaupt eine statische Variable und keine einfache Membervariable oder sogar nur eine lokale Variable?
-
Danke für deine Antwort Braunstein,
Braunstein schrieb:
Ein unsigned char ist doch etwas klein um als Puffer zu wirken (nur ein char).
Da WriteFile() eine Funktion zum Schreiben von Daten ist, Puffer die zu schreibenden Daten übergibt und ich nur ein Zeichen schreiben möchte, sollte char ausreichend sein. Puffer ist nur als Puffer angegeben, da die Funktion auch ermöglicht mehrere Zeichen zu senden. Bei mir ist es in diesem Fall allerdings wirklich nur 1 Zeichen.
Braunstein schrieb:
Statische Variablen müssen noch definiert werden. Du müsstest also irgendwo in deiner cpp sowas stehen haben.
static const char TForm1::Bestätigung = 0xee; //BeispielDie Initialisierung muss dafür aus dem header raus.
Alles klar, Danke. Sobald möglich (auf jeden Fall heute noch) mache ich das. Ich denke das ist der Knackpunkt.
Braunstein schrieb:
Warum nimmst du überhaupt eine statische Variable und keine einfache Membervariable oder sogar nur eine lokale Variable?
Weil das zu schreibende Zeichen konstant ist und ich auf das Zeichen aus mehreren Methoden der Klasse zugreifen möchte. Sicher könnte ich das als lokale Variable in die Methoden schreiben, aber das sind dann 5 Zeilen mehr im Quelltext vs. 1 Zeile im Header und 1 Zeile im Quelltext (momentan).