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. 😃


Anmelden zum Antworten