C2143 bei enumeration
-
Hallo!
Ich arbeite unter Microsoft Visual Studio 2005 mit MFC. Folgendes is aber kein MFC-Problem.
I verwende für mein Projekt libmsn von Mark Rowe. Doch vieles wurde da vorm Release nicht ganz fertig entwickelt. So erzeugt folgender Code eine Liste von Fehlern:
52 enum CharacterSet 53 { 54 ANSI_CHARSET = 0x00, 55 DEFAULT_CHARSET = 0x01, 56 SYMBOL_CHARSET = 0x02, 57 MAC_CHARSET = 0x4d, 58 SHIFTJIS_CHARSET = 0x80, 59 HANGEUL_CHARSET = 0x81, 60 JOHAB_CHARSET = 0x82, 61 GB2312_CHARSET = 0x86, 62 CHINESEBIG5_CHARSET = 0x88, 63 GREEK_CHARSET = 0xa1, 64 TURKISH_CHARSET = 0xa2, 65 VIETNAMESE_CHARSET = 0xa3, 66 HEBREW_CHARSET = 0xb1, 67 ARABIC_CHARSET = 0xb2, 68 BALTIC_CHARSET = 0xba, 69 RUSSIAN_CHARSET_DEFAULT = 0xcc, 70 THAI_CHARSET = 0xde, 71 EASTEUROPE_CHARSET = 0xee, 72 OEM_DEFAULT = 0xff 73 };Errors:
message.h(54) : error C2143: syntax error : missing '}' before 'constant'
message.h(73) : error C2143: syntax error : missing ';' before '}'
message.h(73) : error C2238: unexpected token(s) preceding ';'
message.h(77) : error C2143: syntax error : missing '}' before '('
message.h(77) : fatal error C1903: unable to recover from previous error(s); stopping compilationMeiner Ansicht nach liegt es an den Konstanten in hexadezimaler Schreibweise... Denn es gibt außerdem noch zwei andere Enumerationen, die keinen Fehler verursachen.
I habe schon gegoogelt, doch habe bisher keine hilfreiche Ergebnisse gefunden.Frohes Neues!
A-jage
-
a-jage schrieb:
Ich arbeite unter Microsoft Visual Studio 2005 mit MFC. Folgendes is aber kein MFC-Problem.
das erklärt, warum du im c++-builder-forum postest.
Meiner Ansicht nach liegt es an den Konstanten in hexadezimaler Schreibweise...
tut es nicht. es liegt vermutlich daran, dass einige oder alle konstanten schon mit #define angelegt wurden (durch windows.h).
-
ya sorry... hab auch grad erst gesehn dass i im vcl board poste. könnten die moderator es vielleicht verschieben..?
und wie sollte i dieses Problem lösen..? diese enum-liste löschen..?
A-jage
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ok... habe festgestellt dass jeder identifier bereits in wingdi.h definiert ist...
Was soll i nun machen..? Soll i die enum liste löschen oder...?
A-jage
-
Wenn diese defines aus der WINAPI kommen dann würde ich Sie in keinem Fall neu definieren.
-
Ok, das heißt die enum liste löschen..(?)
A-jage
-
Die enums klein schreiben. Das Problem hatte ich damals auch schon und seit dem schreibe ich Konstanten und Enums klein. Denn dummerweise werden schon Makros komplett groß geschrieben. Und Makros are Evil und das wird hier mal wieder deutlich.
enum CharacterSet { ansi_charset = 0x00, default_charset = 0x01, symbol_charset = 0x02, ... };
-
Ist eh IMO etwas sinnlos da nochmal charset hinter zu setzen, da durch
enum characterset { ansi = 0x00, normal = 0x01, symbol = 0x02, mac = 0x4d, shiftjis = 0x80, hangeul = 0x81, johab = 0x82, gb2312 = 0x86, chinesebig5 = 0x88, greek = 0xa1, turkish = 0xa2, vietnamese = 0xa3, hebrew = 0xb1, arabic = 0xb2, baltic = 0xba, russian = 0xcc, thai = 0xde, easteuropte = 0xee, oem = 0xff };und dann characterset::greek ja schon deutlich wird, das es ein charset ist, und zwar greek.
-
Hab ich auch gedacht, aber dummerweise ist characterset::greek laut MSVC2005-Warning nicht standardkonform... auch wenn er es noch durchlässt. Wobei ich bei mir auch _charset weg gelassen hätte.

-
Und warum definierst Du die alle nochmal wenn sie bereits in der WINAPI drin sind?
-
Also, _i_ hab sie nicht neu definiert.
So stand es in libmsn gecodet...Aber i könnte doch - an Artchi - das, was bereits definiert wurde, und wo gleich sind auch löschen oder..?
A-jage