Kompilierfehler: (g++) ... is not a type



  • Ein kleiner Ausschnitt aus meiner Klasse:

    template <class TBandHash,
              class TQGramHash,
              class BHT,
              class QGramHashFunction>
    class LSH_Generic {
        typedef TQGramHash SignatureHash; 
    
        virtual BandHash bandHashFunction(std::vector<SignatureHash>::iterator sig_begin,
                                          std::vector<SignatureHash>::iterator sig_end);
    

    In meinem Fall ist TQGramHash = uint32_t

    Es kommt folgender Fehler:

    In file included from ../../readmapper/mapper/module/IndexOptions.h:5:0,
                     from ../../readmapper/mapper/module/IndexOptions.cpp:1:
    ../../readmapper/mapper/map/LSH.h:252:71: error: 'std::vector<TQGramHash, std::allocator<_T2> >::iterator' is not a type
         LSH_VIRTUAL BandHash bandHashFunction(std::vector<SignatureHash>::iterator sig_begin,
                                                                           ^
    ../../readmapper/mapper/map/LSH.h:253:71: error: 'std::vector<TQGramHash, std::allocator<_T2> >::iterator' is not a type
                                               std::vector<SignatureHash>::iterator sig_end);
                                                                           ^
    

    Wenn ich SignatureHash direkt als uint32_t definiere (also typedef uint32_t SignatureHash; ) kompiliert alles fehlerfrei.

    Warum?


  • Mod



  • ok, danke, es geht.

    Warum gibt es überhaupt dieses typename? Angenommen, das keyword typename würde nicht existieren. Gäbe es dann Situationen, in denen es für den Compiler nicht eindeutig ist, was gemeint ist? Ein Beispiel wäre schön, weil irgendwie hab ich bisher den Sinn von typename noch nicht verstanden.



  • Les die verlinkte Seite.


  • Mod

    Nathan schrieb:

    Les die verlinkte Seite.

    Und du lies mal einen Duden :p


Log in to reply