no matching member function for call to 'connect'



  • Hi,
    ich versuche zu verstehen, warum ich die Fehlermeldung:
    no matching member function for call to 'connect'
    in nummer.cpp bekomme.

    nummer.h:

    #ifndef NUMMER_H
    #define NUMMER_H
    
    #include <QLCDNumber>
    
    class nummer : QLCDNumber
    {
    
    Q_OBJECT
    
    public:
        nummer();
    
    };
    
    #endif // NUMMER_H
    

    nummer.cpp:

    #include "nummer.h"
    
    nummer::nummer()
    {
        QObject::connect()  //no matching member function for call to 'connect'
    }
    

    Es wäre nachvollziehbar, wenn ich in nummer.h Zeile 4, 6 oder 9 vergessen hätte.



  • Erbe mal public von QLCDNumber.



  • @theAnfänger77 sagte in no matching member function for call to 'connect':

    QObject::connect()

    Was soll denn da mit was verbunden werden? Ein QObject::connect ohne parameter gibt es nicht. Der compiler wird wohl auch mehr dazu sagen.



  • Vielen Dank! 🙂
    Das ist die Lösung:

    nummer.h:

    #ifndef NUMMER_H
    #define NUMMER_H
    
    #include <QLCDNumber>
    #include <QTimer>
    
    class nummer : public QLCDNumber
    {
    
    Q_OBJECT
    
    public:
        nummer();
        void reciever();
    
    private:
        QTimer* T1;
    
    };
    
    #endif // NUMMER_H
    

    nummer.cpp:

    #include "nummer.h"
    
    nummer::nummer()
    {
        QObject::connect(T1, SIGNAL(timeout()), this, SLOT(reciever()));
        T1 = new QTimer(this);
    }
    
    void nummer::reciever()
    {
        //Code
    }
    


  • @theAnfänger77
    Das enthält wieder den gleichen Fehler wie neulich ...

        QObject::connect(T1, SIGNAL(timeout()), this, SLOT(reciever()));
        T1 = new QTimer(this);
    

    Und dann überleg dir mal, welcher sender hier verbunden wird.



  • Muss man mit Qt eigentlich ständig händisch new verwenden?



  • Muß man nicht, aber durch die Angabe von this als Konstruktor-Parameter wird dieses Objekt automatisch im Destruktor mittels delete gelöscht.

    Für ein nicht-visuelles Objekt (wie QTimer hier) ist das also nicht erforderlich (wenn man den Konstruktor-Parameter wegläßt - weil nullptr das Default-Argument ist), für visuelle Objekte jedoch zwingend (weil es einen Parent benötigt), weil es sonst beim delete eben crasht.
    Und aus Konsistenz werden darum eben (fast) alle Qt-Objekte mit new erzeugt.



  • @Th69 Aha, ok. Solange sich das Zeug selbst aufräumt gehts ja.



  • Ich muss noch einen Fehler korrigieren.
    Die Datei nummer.h muss so aussehen:

    #include <QLCDNumber>
    #include <QTimer>
    
    class nummer : public QLCDNumber
    {
    
    Q_OBJECT
    
    public:
        nummer();
     
    private:
        QTimer* T1;
    
    private slots:
        void reciever();
    };
    
    #endif // NUMMER_H
    

Log in to reply