Generics funktionieren nicht?



  • Hi!

    Ich lese mich gerade in QT ein und soweit läuft das ganze auch ziemlich gut, nur stehe ich gerade echt etwas wie der Ochse vorm Tor. Ich möchte eine QMap mit einem Integer als Key und einem QVector als Value setzen, aber das will einfach nicht gehen:

    QMap<int,QVector<QPoint>> curvemap_;
    

    Wirft gleich eine ganze Reihe von Fehlern:
    `./qttest4.hpp:44:25: Warnung: Operator »>>« wird in C++0x als zwei spitze schließende Klammern behandelt [-Wc++0x-compat]

    ./qttest4.hpp:44:25: Anmerkung: Klammern um »>>«-Ausdruck empfohlen

    ./qttest4.hpp:44:28: Fehler: »vecmap_« wurde in diesem Gültigkeitsbereich nicht definiert

    ./qttest4.hpp:44:25: Fehler: »>>« sollte innerhalb einer geschachtelten Templateargumentliste »> >« sein

    LIB/qttest4.cpp:118:53: Fehler: keine passende Funktion für Aufruf von »QMapIterator<int, QVector<QPointF> >::QMapIterator(QMap<int, QVector<QPoint> >&)«

    LIB/qttest4.cpp:118:53: Anmerkung: Kandidaten sind:

    /usr/include/qt4/QtCore/qmap.h:1083:1: Anmerkung: QMapIterator<Key, T>::QMapIterator(const QMap<aKey, aT>&) [with Key = int, T = QVector<QPointF>]

    /usr/include/qt4/QtCore/qmap.h:1083:1: Anmerkung: keine bekannte Umwandlung für Argument 1 von »QMap<int, QVector<QPoint> >« nach »const QMap<int, QVector<QPointF> >&«

    /usr/include/qt4/QtCore/qmap.h:1083:1: Anmerkung: QMapIterator<int, QVector<QPointF> >::QMapIterator(const QMapIterator<int, QVector<QPointF> >&)

    /usr/include/qt4/QtCore/qmap.h:1083:1: Anmerkung: keine bekannte Umwandlung für Argument 1 von »QMap<int, QVector<QPoint> >« nach »const QMapIterator<int, QVector<QPointF> >&«

    `

    Als erstes habe ich daran gedacht, dass ich vielleicht eine Klasse nicht mit eingebunden habe, aber da ist alles korrekt.
    Lustigerweise funktioniert:

    QMap<int, int> cmap_;
        QVector<QString> vec_;
    

    fehlerfrei.

    Wie schon in der Fehlerausgabe ist das ganze im Header. Ich verstehe das einfach nicht - wie kann allein die verschachtelte Verwendung von Generics zu einem unkompilierbaren Code führen?

    Weiß jemand, was ich da tun muss damit's läuft? (Verwende Ubuntu und als IDE Netbeans)
    Danke!!



  • Vor C++11 brauchst du ein Leerzeichen zwischen den schließenden >>, als "> >":

    QMap<int,QVector<QPoint> > curvemap_;
    


  • Tatsächlich, das war's!
    DANKE! 🙂



  • Steht doch alles detailiert in der Fehlermeldung drin 😉



  • Aber es sind doch

    zwei spitze schließende Klammern
    

    ? 😕



  • Ich meinte nicht diese Warnung, sondern den Fehler

    Fehler: »>>« sollte innerhalb einer geschachtelten Templateargumentliste »> >« sein

    Und vor C++0x (d.h. C++11) wurden eben 2 spitze Klammern generell als Shift-Operator geparst - und seitdem aber innerhalb eines Template-Ausdrucks als 2 schließende spitze Klammern. Um dann aber doch den Shift-Operator nutzen zu können, muß der Ausdruck dann mit (runden) Klammern versehen werden, z.B.

    X<Y<(1>>5)>>
    

Log in to reply