Reputation: 5482
When updating our Signal/Slot function we run into undefined problems. This is the error we receive:
This is what is was before, working all fine without problems:
Mainwindow.cpp
connect(_restrict, &Restrict::windowChanged, _record, &Record::onWindowChanged);
Mainwindow.h:
private slots:
void onWindowChanged(QDateTime current, QString processName, QString windowTitle, QString url, long prevPID, long currPID);
record.h:
public slots:
void onWindowChanged(QDateTime time, QString processName, QString windowTitle, QString url, long prevPID, long currPid);
restrict.h:
signals:
void windowChanged(QDateTime time, QString processName, QString windowTitle, QString url = "", long prevPID = -1, long currPid = -1);
Our data after the changes:
Mainwindow.cpp
connect(_restrict, &Restrict::windowChanged, _record, &Record::onWindowChanged);
Mainwindow.h:
private slots:
void onWindowChanged(QDateTime current, QString processName, QString windowTitle, QString url, long prevPID, long currPID, bool whitelisted);
record.h:
public slots:
void onWindowChanged(QDateTime time, QString processName, QString windowTitle, QString url, long prevPID, long currPid, bool whitelisted);
restrict.h:
signals:
void windowChanged(QDateTime time, QString processName, QString windowTitle, QString url = "", long prevPID = -1, long currPid = -1, bool whitelisted = false);
Errors coming up:
\mainwindow.cpp:84:91: error: no matching function for call to 'MainWindow::connect(Restrict*&, void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool), Record*&, void (Record::*)(QDateTime, QString, QString, QString, long int, long int, bool))'
connect(_restrict, &Restrict::windowChanged, _record, &Record::onWindowChanged);
^
\mainwindow.cpp:84:91: note: candidates are:
In file included from \Qt\5.5\mingw492_32\include/QtCore/qabstractanimation.h:37:0,
from \Qt\5.5\mingw492_32\include/QtCore/QtCore:4,
from \Qt\5.5\mingw492_32\include/QtWidgets/QtWidgetsDepends:3,
from \Qt\5.5\mingw492_32\include\QtWidgets/QtWidgets:3,
from \mainwindow.cpp:1:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:196:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
static QMetaObject::Connection connect(const QObject *sender, const char *signal,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:196:36: note: no known conversion for argument 2 from 'void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool)' to 'const char*'
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:199:36: note: static QMetaObject::Connection QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:199:36: note: no known conversion for argument 2 from 'void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool)' to 'const QMetaMethod&'
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:475:32: note: QMetaObject::Connection QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:475:32: note: no known conversion for argument 2 from 'void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool)' to 'const char*'
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:213:43: note: template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType)
static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:213:43: note: template argument deduction/substitution failed:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static QMetaObject::Connection QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const typename QtPrivate::FunctionPointer<Func2>::Object*, Func2, Qt::ConnectionType) [with Func1 = void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool); Func2 = void (Record::*)(QDateTime, QString, QString, QString, long int, long int, bool)]':
\mainwindow.cpp:84:91: required from here
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:213:43: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<void (Record::*)(QDateTime, QString, QString, QString, long int, long int, bool)>'
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:245:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, Func2)
connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:245:13: note: template argument deduction/substitution failed:
\mainwindow.cpp:84:91: note: candidate expects 3 arguments, 4 provided
connect(_restrict, &Restrict::windowChanged, _record, &Record::onWindowChanged);
^
In file included from \Qt\5.5\mingw492_32\include/QtCore/qabstractanimation.h:37:0,
from \Qt\5.5\mingw492_32\include/QtCore/QtCore:4,
from \Qt\5.5\mingw492_32\include/QtWidgets/QtWidgetsDepends:3,
from \Qt\5.5\mingw492_32\include\QtWidgets/QtWidgets:3,
from \mainwindow.cpp:1:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:254:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0) && (! QtPrivate::FunctionPointer<Func2>::IsPointerToMemberFunction)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const QObject*, Func2, Qt::ConnectionType)
connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:254:13: note: template argument deduction/substitution failed:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(((int)(QtPrivate::FunctionPointer<Func2>::ArgumentCount) >= 0) && (! QtPrivate::FunctionPointer<Func2>::IsPointerToMemberFunction)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const QObject*, Func2, Qt::ConnectionType) [with Func1 = void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool); Func2 = void (Record::*)(QDateTime, QString, QString, QString, long int, long int, bool)]':
\mainwindow.cpp:84:91: required from here
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:254:13: error: invalid use of incomplete type 'struct QtPrivate::QEnableIf<false, QMetaObject::Connection>'
In file included from \Qt\5.5\mingw492_32\include/QtCore/qnamespace.h:37:0,
from \Qt\5.5\mingw492_32\include/QtCore/qobjectdefs.h:41,
from \Qt\5.5\mingw492_32\include/QtCore/qobject.h:40,
from \Qt\5.5\mingw492_32\include/QtCore/qabstractanimation.h:37,
from \Qt\5.5\mingw492_32\include/QtCore/QtCore:4,
from \Qt\5.5\mingw492_32\include/QtWidgets/QtWidgetsDepends:3,
from \Qt\5.5\mingw492_32\include\QtWidgets/QtWidgets:3,
from \mainwindow.cpp:1:
\Qt\5.5\mingw492_32\include/QtCore/qglobal.h:1073:45: error: declaration of 'struct QtPrivate::QEnableIf<false, QMetaObject::Connection>'
template <bool B, typename T = void> struct QEnableIf;
^
In file included from \Qt\5.5\mingw492_32\include/QtCore/qabstractanimation.h:37:0,
from \Qt\5.5\mingw492_32\include/QtCore/QtCore:4,
from \Qt\5.5\mingw492_32\include/QtWidgets/QtWidgetsDepends:3,
from \Qt\5.5\mingw492_32\include\QtWidgets/QtWidgets:3,
from \mainwindow.cpp:1:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:285:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, Func2)
connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:285:13: note: template argument deduction/substitution failed:
\mainwindow.cpp:84:91: note: candidate expects 3 arguments, 4 provided
connect(_restrict, &Restrict::windowChanged, _record, &Record::onWindowChanged);
^
In file included from \Qt\5.5\mingw492_32\include/QtCore/qabstractanimation.h:37:0,
from \Qt\5.5\mingw492_32\include/QtCore/QtCore:4,
from \Qt\5.5\mingw492_32\include/QtWidgets/QtWidgetsDepends:3,
from \Qt\5.5\mingw492_32\include\QtWidgets/QtWidgets:3,
from \mainwindow.cpp:1:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:293:13: note: template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const QObject*, Func2, Qt::ConnectionType)
connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
^
\Qt\5.5\mingw492_32\include/QtCore/qobject.h:293:13: note: template argument deduction/substitution failed:
\Qt\5.5\mingw492_32\include/QtCore/qobject.h: In substitution of 'template<class Func1, class Func2> static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const QObject*, Func2, Qt::ConnectionType) [with Func1 = void (Restrict::*)(QDateTime, QString, QString, QString, long int, long int, bool); Func2 = void (Record::*)(QDateTime, QString, QString, QString, long int, long int, bool)]':
\mainwindow.cpp:84:91: required from here
We only added a single boolean value, added it to the signal as well as the corresponding slot and now we have no idea why this suddenly does not work anymore.
Upvotes: 3
Views: 3820
Reputation: 1078
I have read on this page: http://doc.qt.io/qt-5/signalsandslots.html
"if your compiler does not support C++11 variadic templates, this syntax only works if the signal and slot have 6 arguments or less."
In above statement "this syntax" is the new connect syntax you are using.
Seems like your signal-slot has 7 arguments now. This may be the potential cause of the problem.
Just to double check you can use the old signal slot connect syntax ( The one with the macros SIGNAL and SLOT ).
Changes necessary to make it work within your .pro file:
CONFIG += c++11
Upvotes: 5