Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.0.0
-
None
-
win32-msvc10
Description
Connecting signal and slot like
void signal(int, QString, int, void *); void slot(int i, QString s, int i2, void *f); QObject::connect(class1, &Class::signal, class2, &Class::slot);
causes this error:
D:\Qt\Qt5.0.0\5.0.0\msvc2010\include\QtCore/qobject_impl.h(82) : error C2078: too many initializers D:\Qt\Qt5.0.0\5.0.0\msvc2010\include\QtCore/qobject_impl.h(81) : while compiling class template member function 'const int *QtPrivate::ConnectionTypes<ArgList>::types(void)' with [ ArgList=QtPrivate::List<int,QtPrivate::List<QString,QtPrivate::List<int,QtPrivate::List<void *,void>>>> ] D:\Qt\Qt5.0.0\5.0.0\msvc2010\include\QtCore/qobject.h(245) : see reference to class template instantiation 'QtPrivate::ConnectionTypes<ArgList>' being compiled with [ ArgList=QtPrivate::List<int,QtPrivate::List<QString,QtPrivate::List<int,QtPrivate::List<void *,void>>>> ] ..\Qt5BugTest\main.cpp(25) : see reference to function template instantiation 'QMetaObject::Connection QObject::connect<void(__thiscall Class::* )(int,QString,int,void *),void(__thiscall Class::* )(int,QString,int,void *)>(const Class *,Func1,const Class *,Func2,Qt::ConnectionType)' being compiled with [ Func1=void (__thiscall Class::* )(int,QString,int,void *), Func2=void (__thiscall Class::* )(int,QString,int,void *) ]
Connecting using SLOT and SIGNAL seems to work.
Test code:
main.h
#ifndef MAIN_H #define MAIN_H #include <QObject> #include <QDebug> #include <QFile> class Class : public QObject { Q_OBJECT public: Class(QObject *obj = 0); void emitSignal(); signals: void signal(int, QString, int, void *); public slots: void slot(int i, QString s, int i2, void *f); }; #endif // MAIN_H
main.cpp
#include "main.h" #include <QCoreApplication> Class::Class(QObject *obj): QObject(obj) { } void Class::emitSignal() { emit signal(0, "Signal", 2, 0); } void Class::slot(int i, QString s, int i2, void *f) { qDebug() << "Slot: " << s; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Class *class1 = new Class(&a); Class *class2 = new Class(&a); QObject::connect(class1, &Class::signal, class2, &Class::slot); //QObject::connect(class1, SIGNAL(signal(int,QString,int,QFile*)), class2, SLOT(slot(int,QString,int,QFile*))); class1->emitSignal(); return 0; }