einschließlich windows.h führt zu Konflikten mit dem lokalen Variablennamen

8

Ich nehme windows.h in einer meiner h-Dateien (um CaptureStackBackTrace zu verwenden) in einem Visual-Studio-Projekt auf. Zuerst bekam ich einige Compilerfehler wegen der Verwendung von min / max std Methoden und des Makros mit dem gleichen Namen in windows.h , aber das scheint durch #define NOMINMAX gelöst zu sein, wie ich in anderen SO Posts gelesen habe. (Ich sage "scheint", weil ich nicht sicher sein kann, bis mein gesamtes Projekt wieder in Ordnung ist).

Das Problem besteht darin, dass einige lokale Variablennamen den Build jetzt unterbrechen. Die Linie:

%Vor%

innerhalb einer Klassenmethode verursacht den folgenden Fehler:

%Vor%

während die cpp-Datei kompiliert wird, wenn ich den Variablennamen in grp1_ ändere.

Natürlich kann ich einfach den Variablennamen ändern, aber trotzdem habe ich das Gefühl, dass ich etwas falsch mache - oder? Oder ist dies ein bekanntes Problem, wenn windows.h hinzugefügt wird? Gibt es eine andere, elegantere Lösung als den Variablennamen zu ändern?

    
Itamar Katz 13.07.2011, 12:26
quelle

3 Antworten

10

dlg.h enthält die Zeile

%Vor%

Sie können es ausschließen, indem Sie WIN32_LEAN_AND_MEAN definieren.

    
Henrik 13.07.2011, 12:34
quelle
3

Es ist bis zu einem gewissen Grad ein Problem mit allen Bibliothekskopfzeilen. C- und C ++ - Reservierungsnamen beginnen mit einem _ für die Implementierung (der Standardbibliothek). Andere Bibliotheken sind für sich allein. Man würde auf ein namespace hoffen, oder wenn die Bibliothek in C kompilierbar sein muss, eine Art Namenskonvention, wie ein Präfix, aber weder Windows noch Posix tun dies. (In den frühen Tagen enthielten die Header für X ein #define String , was kein Problem mit anderen Bibliotheken verursachte.)

Am Ende gibt es keine gute Lösung. Sie müssen nur warten, bis Sie getroffen werden, und dann den Namen Ihrer Funktion ändern. ( windows.h ist besonders schlecht, weil die meisten "Funktionen" darin Makros sind und dem Geltungsbereich nicht gehorchen.)

    
James Kanze 13.07.2011 12:36
quelle
1

Nun, grp1 ist so in dlgs.h definiert:

%Vor%

und dlgs.h sind in windows.h enthalten, daher der Konflikt.

Du kannst #undef grp1 nach dir #include <windows.h> . Nicht die schönste Seite, aber wenn Sie windows.h nur einmal hinzufügen, können Sie diese Korrekturen an einem Ort behalten.

    
eran 13.07.2011 12:35
quelle

Tags und Links