QStack macht unschöne Sachen?



  • Hi erstmal.

    Aber nu genug der netten Worte^^ Zu meinem Problem:

    Ich brauche eine Liste mit den parent-fenstern von Objekten...

    Anfangen tut es mit:

    actualParent.push(*this);
    

    Da liegt auch schon das Problem... Der Rest ist bisher scheinbar fehlerfrei.

    In dem Fall ist actualParent ein QStack<QWidget>

    Nun gibt mir der Compiler jenes aus:

    /usr/local/Trolltech/Qt-4.0.0/include/QtGui/qwidget.h: In member function `void
       QVector<T>::append(const T&) [with T = QWidget]':
    /usr/local/Trolltech/Qt-4.0.0/include/QtCore/qstack.h:40:   instantiated from `void QStack<T>::push(const T&) [with T = QWidget]'
    qparamdialog.cpp:76:   instantiated from here
    /usr/local/Trolltech/Qt-4.0.0/include/QtGui/qwidget.h:614: error: `
       QWidget::QWidget(const QWidget&)' is private
    /usr/local/Trolltech/Qt-4.0.0/include/QtCore/qvector.h:404: error: within this
       context
    

    Ersteinmal find ich diese Fehlerbeschreibung recht...Nunja... unaufschlüssig.
    Dennoch hab ich versucht es zu entschlüsseln.

    Meines erachtens nach, führt QStack beim push(en) den Konstruktor des
    übergebenen Types auf, als mit dem Typen als Argument. Seh ich das so richtig?

    Wenn ja, wo ist der Sinn dahinter?
    Wenn nein, was hab ich falsch gemacht und was muss ich/kann ich ändern/verbessern?

    Mfg

    Treptower



  • Dein Problem ist das der Copy-Constructor private ist, das heißt du kannst ihn nicht benutzen ;). Bei "actualParent.push(*this);" wird aber genau das versucht.
    Das Problem würdest du umgehen wenn du nur zeiger auf deine Widgets im Stack speichern würdest.
    Vermutlich möchtest du auch noch verschiedene Widgets in dem Stack speichern. In C++ funktioniert die Laufzeit Polymorphie aber nur mit Zeigern:

    QStack < QWidget * > blupp;
    
    blupp.push(this);
    


  • Könnte er es auch mit Referenzen versuchen?
    QStack<QWidget&>;



  • hehejo schrieb:

    Könnte er es auch mit Referenzen versuchen?
    QStack<QWidget&>;

    🙄 🙄 🙄 🙄


Anmelden zum Antworten