Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-29130

"too many initializers" - error when connecting signal and slot with a pointer parameter.

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 5.0.2
    • 5.0.0
    • Core: Object Model
    • 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;
      }
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            ogoffart Olivier Goffart (Woboq GmbH)
            latexi95 Lassi Hämäläinen
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes