Compiler von MSDev 6.0 und Templates...
-
Hi,
ich benutze den Compiler von MSDev 6.0. Beim Compilieren bekomme ich folgende Fehlermeldung:
Compiler schrieb:
[...]error C2062: 'unsigned int'-Typ unerwartet
Hört sich erstmal nicht schlimm an. Mit dem Artikel aus des MSDN komme ich irgendwie nicht weiter. Die Zeilen in der Headerdatei, bei denen er anspringt, sind folgende:
struct TIdent { unsigned int IdentNr; unsigned short ProtoVers; unsigned char SwVersion[10]; unsigned int TimeDate; short ConvStrmToData(unsigned char *pcData, TCl_ModMsgForPerfusor *pCl_Mod) { if ((pcData == NULL)|| (pCl_Mod == NULL)) return -1; unsigned short Pos = 0; IdentNr = pCl_Mod->GetVal<unsigned int>(pcData,Pos); //<-- GEMECKER ProtoVers = pCl_Mod->GetVal<unsigned short>(pcData, Pos); //<-- GEMECKER unsigned char *pcT = SwVersion; pCl_Mod->GetStr(pcData, Pos, pcT, sizeof(SwVersion)); TimeDate = pCl_Mod->GetVal<unsigned int>(pcData, Pos); //<-- GEMECKER return 0; } }; //TIdent //---------------------------------------------------------------------- struct TStatus { //<Variablen> short ConvStrmToData(unsigned char *pcData, TCl_ModMsgForPerfusor *pCl_Mod) { if ((pcData == NULL)|| (pCl_Mod == NULL)) return -1; unsigned short Pos = 0; Request = pCl_Mod->GetVal<unsigned char> (pcData, Pos); //<-- kein Gemecker Alarm = pCl_Mod->GetVal<unsigned int> (pcData, Pos); //<-- kein Gemecker Zustand = pCl_Mod->GetVal<unsigned int> (pcData, Pos); //<-- kein Gemecker Rate = pCl_Mod->GetVal<unsigned int> (pcData, Pos); //<-- kein Gemecker VTBD = pCl_Mod->GetVal<unsigned int> (pcData, Pos); //<-- kein Gemecker Time = pCl_Mod->GetVal<unsigned short> (pcData, Pos); //<-- kein Gemecker return 0; } }; //TStatus
Das Template GetVal hab ich selbst geschrieben und bei anderen Compilern (z.B. BCB6) geht er auch ohne Probleme drüber. Doch was mich richtig stutzig macht, ist die Tatsache, dass die Zeilen der nächsten Struktur nicht angemeckert werden.
Jemand ne Idee?Maffe
-
Wie sieht GetVal denn aus?
-
Zu der Structs:
Ganz einfach, weil alles public ist. Da ist es für mich logischer, das ich Structs verwende. Ist bestimmt ein Überbleibsel aus meiner reinen C-Zeit.Aber ist ja eigentlich auch egal.
GetVal sieht so aus:
template (typename T) T TCl_ModMsgForPerfusor::GetVal (unsigned char *pcData, unsigned short& rPos);
Aber ich wüsste nicht, was dir das helfen soll?
-
du meinst wohl:
template <typename T> T TCl_ModMsgForPerfusor::GetVal (unsigned char *pcData, unsigned short& rPos);
Erklären kann ich mir den Fehler nicht. Der einzige Unterschied zwischen oben und unten ist das Leerzeichen vor der Klammer.
-
Ja klar meine ich.
Das andere hört sich probierens wert an. Ist mir noch gar nicht aufgefallen. Mal sehen...
-
Nee das war's nicht. Wäre auch zu komisch gewesen.
-
Hab mir den COde jetzt nicht 100%ig angeschaut, ich vermute mal fast, das es am Compiler liegt... VC6 war sehr miserablen was Templates anbelangt... Nimm doch VC2005 Express... Der Support für VC6 ist eh schon ausgelaufen...
-
Dann werd ich's mit MSVS 2005 probieren. Ich hab auch schon bemerkt, dass der VC6 sich bei Templates ein bisschen komisch hat. Wollen wir mal hoffen, dass sich das geändert hat.
-
VC2005 ist bisher der am besten Standard-Konformste MS compiler...
hat sogar support für type-traits...
-
Hab's probiert. Und es geht. Also VC6.0 ab in die Tonne.