Mam ten poważny problem. Mam wyliczenie zasięgu 2 nazw takiego:Konflikt między przestrzenią nazw a zdefiniuj
namespace FANLib {
namespace ERROR {
enum TYPE {
/// FSL error codes
FSL_PARSER_FILE_IERROR,...
i gdzieś w moim kodu, używam go tak:
FANLib::Log::internalLog(FSLParser::FILE_IERROR, file_ierror, true, FANLib::ERROR::FSL_PARSER_FILE_IERROR);
Wszystko kompiluje dobrze i dobrze, ale jeśli zdarza mi się to " windows.h ", dostaję błędy! Problem jest w „WinGDI.h”, która ma tę linię:
#define ERROR 0
i sprawia, że kompilator myśleć, że po FANLib :: ..., jest zerem! Błąd pojawia się:
Error 1 error C2589: 'stała': nielegalne znak po prawej stronie '::'
Błąd 2 error C2059: błąd składni: '::'
błąd 3 error C2039: „FSL_PARSER_FILE_IERROR”: nie jest członkiem globalnej przestrzeni nazw „`””
Czy mogę coś z tym zrobić, bez konieczności zmiany nazw ze względu na moje jakiegoś bezmyślnego #define
? Czytałem w innym poście, że mogłem #undef ERROR, ale jak bezpieczne jest to?
Zrobiłeś kilka bardzo dobrych punktów. Niestety, wciąż mogę odpowiedzieć tylko na jeden głos. – sbi
Dodałbym "standardowo przyjętą konwencję" jest to, że identyfikatory, które są wszystkie czapki są makrami. –
Windows.h przyjmuje wszystkie "standardowo akceptowane konwencje", wyrzuca je przez okno i deklaruje na nich makra. Ale tak, dobra rada. Nie używaj znaków uniwersalnych do niczego innego niż #defines i nie zezwalaj, aby windows.h był widoczny w nagłówkach. – jalf