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 mittelsdelete
gelöscht.Für ein nicht-visuelles Objekt (wie
QTimer
hier) ist das also nicht erforderlich (wenn man den Konstruktor-Parameter wegläßt - weilnullptr
das Default-Argument ist), für visuelle Objekte jedoch zwingend (weil es einen Parent benötigt), weil es sonst beimdelete
eben crasht.
Und aus Konsistenz werden darum eben (fast) alle Qt-Objekte mitnew
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