template problem



  • Hallo C++ Community,

    ich habe eine Klasse TempSensor, diese ist vererbt von QLabel..
    Jetzt versuche ich mein erstelles Objekt von DragTab (erbt von QTabWidget) in einer QMap zu abzulegen.

    QMap<QString, DragTab<QLabel>* > mapTabs;
    mapTabs["Analog"] = new DragTab<TempSensor>("Analog", objInputTabWidget);

    Doch ich bekomme diesen Compilerfehler:

    d:\...\Designer.cpp(17): error C2440: '=': 'DragTab<T> *' kann nicht in 'DragTab<T> ' konvertiert werden
    with
    [
    T=TempSensor
    ]
    and
    [
    T=QLabel
    ]

    Ich hab schon alles mögliche probiert was mir eingefallen ist, doch irgendwie komm ich nicht drauf...

    MFG
    TheHam



  • Die Begründung wurde im Grunde schon in http://c-plusplus.net/forum/viewtopic-var-t-is-186582.html geliefert - DragTab<T1> und DragTab<T2> sind völlig unabhängige Objekte, selbst wenn T1 und T2 verwandt sind. Du kannst z.B. eine allgemeine Klasse DragTab (als Ableitung von QTabWidget und als Basis von DragTab<T>) erstellen, die Du in die Map packst.



  • Sorry... aber irgendwie versteh ich nicht ganz was du meinst



  • DragTab<QLabel> und DragTab<TempSensor> sind zwei unabhängige Klassen, die nicht miteinander verwandt sind, auch wenn TempSensor von QLabel abgeleitet ist. Deshalb kannst Du einen Zeiger auf DragTab<TempSensor> nicht in einen Zeiger auf DragTab<QLabel> umwandeln.



  • D.h. ich mach etz ne Klasse Dragtab, die erbt von QTabWidget und eine DragTab<T> die von DragTab erbt?



  • Das wäre eine Möglichkeit, um alle DragTab<T> (die ja alle von DragTab erben) gemeinsam in einem Container lagern zu können. Ob das sinnvoll ist hängt natürlich vom genauen Zweck ab (und den kenne ich nicht 😉 ).


Anmelden zum Antworten