gcc will nicht wie ich



  • Keine Ahnung, ob das hier optimal platziert ist...
    denn das Gefrickel, welches Probleme verursacht, ist nicht von mir, und ich will mich damit auch erstmal gar nicht tiefergehend beschaeftigen - es soll nur funktionieren. 😃
    Mich interessiert nur, ob ich den Fehler evtl. selbst irgendwie schnell beheben kann, oder ob ich versuchen muss/sollte, den Autor damit zu nerven.

    Und zwar geht es um dieses verlockend klingende tool. Die erste Huerden mit fehlendem g++ und boost-Libs auf meiner Kubuntu-Installation habe ich noch genommen, aber jetzt spuckt das Teil beim Compilieren immer folgendes aus:

    make -C ct
    make: Gehe in Verzeichnis '/media/data/nettemp/snes/chrono trigger/ct'
    g++ -O3 -Wall -Wundef -Wcast-qual -Wpointer-arith -Wconversion -Wwrite-strings -Wsign-compare -Wredundant-decls -Wcast-align -Wformat -Woverloaded-virtual -fno-default-inline -I. -DVERSION=\"1.15.3.4\" -pipe -g -c -o ctcset.o ctcset.cc
    ctcset.cc:266: error: no member function ?compare? declared in ?std::char_traits<short unsigned int>?
    ctcset.cc:266: error: invalid function declaration
    ctcset.cc:274: error: no member function ?copy? declared in ?std::char_traits<short unsigned int>?
    ctcset.cc:274: error: invalid function declaration
    ctcset.cc:282: error: no member function ?move? declared in ?std::char_traits<short unsigned int>?
    ctcset.cc:282: error: invalid function declaration
    ctcset.cc:291: error: no member function ?assign? declared in ?std::char_traits<short unsigned int>?
    ctcset.cc:291: error: invalid function declaration
    make: *** [ctcset.o] Fehler 1
    make: Verlasse Verzeichnis '/media/data/nettemp/snes/chrono trigger/ct'

    Dazu duerften folgende Zeilen gehoeren:

    namespace std/*__gnu_cxx*/
    {
      template<> 
      int char_traits<ctchar>::
      compare(const ctchar* s1, const ctchar* s2, std::size_t n)      // Zeile 266
      {
        for(unsigned c=0; c<n; ++c) if(s1[c] != s2[c]) return s1[c] < s2[c] ? -1 : 1;
        return 0;
      }
    
      template<>
      ctchar* char_traits<ctchar>::
      copy(ctchar* s1, const ctchar* s2, size_t n)      // Zeile 274
      {
        for(unsigned c=0; c<n; ++c)s1[c] = s2[c];
        return s1;
      }
    
      template<>
      ctchar* char_traits<ctchar>::
      move(ctchar* s1, const ctchar* s2, size_t n)    // Zeile 282
      {
        if(s1 < s2) return copy(s1,s2,n);
        for(unsigned c=n; c-->0; )s1[c] = s2[c];
        return s1;
      }
    
      template<>
      ctchar* char_traits<ctchar>::
      assign(ctchar* s, size_t n, ctchar a)    // Zeile 291
      {
        for(unsigned c=0; c<n; ++c) s[c] = a;
        return s;
      }
    }
    

    g++ ist uebrigens Version 4.1.2, falls das relevant ist.



  • Bevor du anfängst, Methoden für eine Spezialisierung anzulegen, mußt du afaik erstmal dem Compiler sagen, daß diese Spezialisierung existiert (im Standard gibt's nur char_traits<char> und char_traits<wchar_t>).



  • Bin mir nicht ganz sicher, ob das nach C++ oder nach "Andere Compiler" gehört, aber da ich eher zu ersterem tendiere (dürfte ja ein Problem mit dem Code und nicht mit dem Compiler sein) verschiebe ich Dich mal zu den Kollegen nach C++.



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply