windows - Namespace 'cmb1' forårsager C ++ kompileringsfejl

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg forsøger at kompilere denne kode:


#include <windows.h>

namespace cmb1 {
}

void main() {}


Jeg får dette:


Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
a.cc
a.cc(3) : error C2059: syntax error : 'constant'
a.cc(3) : error C2143: syntax error : missing ';' before '{'
a.cc(3) : error C2447: '{' : missing function header (old-style formal list?)


Dito for cmb2, cmb3 og cmb4. Jeg stoppede på det tidspunkt. cm4, btw, kompilerer helt fint.


Jeg prøvede at omslutte namespace med noget andet:


namespace dilum {
namespace cmb4 {
}
}


Men kompileren mislykkedes stadig.


Hvad sker der?

Bedste reference


fra windows.h:


#define cmb1 0x470
#define cmb2 0x471
#define cmb3 0x472
#define cmb4 0x473
#define cmb5 0x474
#define cmb6 0x475
#define cmb7 0x476
#define cmb8 0x477
#define cmb9 0x478
#define cmb10 0x479
#define cmb11 0x47A
#define cmb12 0x47B
#define cmb13 0x47C
#define cmb14 0x47D
#define cmb15 0x47E
#define cmb16 0x47F

Andre referencer 1


cmb1 kan være en makro defineret i windows.h. Hvis makroen udvider sig til et udtryk, ser kompilatoren


namespace <the\_expanded\_expression> {
}

Andre referencer 2


Konstanten cmb1 er defineret i <windows.h> som følger:


#define cmb1 0x0470


Hvis du bruger Visual Studio 2010, kan du svæve over den røde squiggly-pil under cmb1 for at se definitionen.


Det er overflødigt at sige, at namespace 0x0470 { } ikke er en gyldig navnepladsdeklaration.