Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. no matching member function for call to 'connect'

no matching member function for call to 'connect'

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 2 Posters 3.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JonBJ JonB

    @t-vanbesien said in no matching member function for call to 'connect':

    /*ERROR*/connect(lineEdit, &QLineEdit::editingFinished, signalMapper, &QSignalMapper::map);

    void QSignalMapper::map(QObject *sender) expects a QObject *sender parameter. void QLineEdit::editingFinished() does not provide one.

    OIC, void QSignalMapper::map() does not take any parameter. But now there are two slots of the same name which differ only by parameter. Then you may need to use qOverload<>()/QOverload<>::of() to specify which one? Maybe QOverload<>::of<>(&QSignalMapper::map) or QOverload<>::of<void>(&QSignalMapper::map)? (I don't know how you specify "the one with no parameter").

    Ah, see https://stackoverflow.com/questions/68552698/connecting-qsignalmapper-qt-5-15-2 ?

    Also, if you had copied and pasted the full error details from the compiler I think it would have said a bit more than just no matching member function for call to 'connect', does it not show information about the various possible slot method overloads?

    T Offline
    T Offline
    t.vanbesien
    wrote on last edited by
    #3

    @JonB

    Here is the full error message:

    /Users/thomasvanbesien/IHM_Bobink/lineedityarnsetpoint.cpp:14: error: no matching member function for call to 'connect'
    ../IHM_Bobink/lineedityarnsetpoint.cpp:14:3: error: no matching member function for call to 'connect'
                    connect(lineEdit, &QLineEdit::editingFinished, signalMapper, &QSignalMapper::map);
                    ^~~~~~~
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:181:36: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const char *' for 2nd argument
        static QMetaObject::Connection connect(const QObject *sender, const char *signal,
                                       ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:184:36: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const QMetaMethod' for 2nd argument
        static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
                                       ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:432:41: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const char *' for 2nd argument
    inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal,
                                            ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:201:43: note: candidate template ignored: couldn't infer template argument 'Func2'
        static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
                                              ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:242:13: note: candidate template ignored: couldn't infer template argument 'Func2'
                connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
                ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:287:13: note: candidate template ignored: couldn't infer template argument 'Func2'
                connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
                ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:233:13: note: candidate function template not viable: requires 3 arguments, but 4 were provided
                connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
                ^
    /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:276:13: note: candidate function template not viable: requires 3 arguments, but 4 were provided
                connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
                ^
    
    JonBJ 1 Reply Last reply
    0
    • T t.vanbesien

      @JonB

      Here is the full error message:

      /Users/thomasvanbesien/IHM_Bobink/lineedityarnsetpoint.cpp:14: error: no matching member function for call to 'connect'
      ../IHM_Bobink/lineedityarnsetpoint.cpp:14:3: error: no matching member function for call to 'connect'
                      connect(lineEdit, &QLineEdit::editingFinished, signalMapper, &QSignalMapper::map);
                      ^~~~~~~
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:181:36: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const char *' for 2nd argument
          static QMetaObject::Connection connect(const QObject *sender, const char *signal,
                                         ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:184:36: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const QMetaMethod' for 2nd argument
          static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
                                         ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:432:41: note: candidate function not viable: no known conversion from 'void (QLineEdit::*)()' to 'const char *' for 2nd argument
      inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal,
                                              ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:201:43: note: candidate template ignored: couldn't infer template argument 'Func2'
          static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
                                                ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:242:13: note: candidate template ignored: couldn't infer template argument 'Func2'
                  connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
                  ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:287:13: note: candidate template ignored: couldn't infer template argument 'Func2'
                  connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
                  ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:233:13: note: candidate function template not viable: requires 3 arguments, but 4 were provided
                  connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
                  ^
      /Users/thomasvanbesien/Qt/6.4.2/macos/lib/QtCore.framework/Headers/qobject.h:276:13: note: candidate function template not viable: requires 3 arguments, but 4 were provided
                  connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot)
                  ^
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #4

      @t-vanbesien said in no matching member function for call to 'connect':

      couldn't infer template argument 'Func2'

      I'm not sure, but this is probably the one that relates to your situation.
      In any case you need to do the "qoverload" I suggested and is in the SO post.

      T 1 Reply Last reply
      1
      • JonBJ JonB

        @t-vanbesien said in no matching member function for call to 'connect':

        couldn't infer template argument 'Func2'

        I'm not sure, but this is probably the one that relates to your situation.
        In any case you need to do the "qoverload" I suggested and is in the SO post.

        T Offline
        T Offline
        t.vanbesien
        wrote on last edited by
        #5

        @JonB

        Thank you for the help. I was able to make it work, I changed the erroneous line to:

        connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of<>(&QSignalMapper::map));
        

        I'm not completely sure why it works. C++ templates are still a bit fuzzy to me, but I'll post an explanation when I understand exactly what the problem was.

        JonBJ 1 Reply Last reply
        0
        • T t.vanbesien

          @JonB

          Thank you for the help. I was able to make it work, I changed the erroneous line to:

          connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of<>(&QSignalMapper::map));
          

          I'm not completely sure why it works. C++ templates are still a bit fuzzy to me, but I'll post an explanation when I understand exactly what the problem was.

          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by JonB
          #6

          @t-vanbesien said in no matching member function for call to 'connect':

          connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of<>(&QSignalMapper::map));

          I don't believe that is a working copy/paste, I think you mean QOverload<>::of(&QSignalMapper::map)?

          C++ templates are still a bit fuzzy to me, but I'll post an explanation when I understand exactly what the problem was.

          There are 2 possible overloads: QSignalMapper::map() & QSignalMapper::map(QObject *).
          QOverload<>::of(...) picks the first one (no parameters), QOverload<QObject *>::of(...) picks the second one. The bit inside <...> specifies the parameters. It's kind of like a cast.

          T 1 Reply Last reply
          1
          • JonBJ JonB

            @t-vanbesien said in no matching member function for call to 'connect':

            connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of<>(&QSignalMapper::map));

            I don't believe that is a working copy/paste, I think you mean QOverload<>::of(&QSignalMapper::map)?

            C++ templates are still a bit fuzzy to me, but I'll post an explanation when I understand exactly what the problem was.

            There are 2 possible overloads: QSignalMapper::map() & QSignalMapper::map(QObject *).
            QOverload<>::of(...) picks the first one (no parameters), QOverload<QObject *>::of(...) picks the second one. The bit inside <...> specifies the parameters. It's kind of like a cast.

            T Offline
            T Offline
            t.vanbesien
            wrote on last edited by
            #7

            @JonB said in no matching member function for call to 'connect':

            I don't believe that is a working copy/paste, I think you mean QOverload<>::of(&QSignalMapper::map)?

            No, the line I copy/pasted does compile and run and has the expected behavior.

            JonBJ 1 Reply Last reply
            0
            • T t.vanbesien

              @JonB said in no matching member function for call to 'connect':

              I don't believe that is a working copy/paste, I think you mean QOverload<>::of(&QSignalMapper::map)?

              No, the line I copy/pasted does compile and run and has the expected behavior.

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #8

              @t-vanbesien
              Interesting. Could you tell me/give me a reference to where you got an example or documentation which uses QOverload<...>::of<...>(...) rather than QOverload<...>::of(...), please? Note the bit I am asking about is the ::of<> having a <...> segment?

              T 1 Reply Last reply
              1
              • JonBJ JonB

                @t-vanbesien
                Interesting. Could you tell me/give me a reference to where you got an example or documentation which uses QOverload<...>::of<...>(...) rather than QOverload<...>::of(...), please? Note the bit I am asking about is the ::of<> having a <...> segment?

                T Offline
                T Offline
                t.vanbesien
                wrote on last edited by t.vanbesien
                #9

                @JonB
                I don't know ? I'm not sure I understand the question. I used

                QOverload<...>::of<...>()
                

                because you wrote it in your first answer to this post. I can't find any documentation about it. If you want a working example I can share the class .cpp and .h of the class and the small debug function I made to make sure it is working properly. You can put it in an empty qt project to check.

                JonBJ 1 Reply Last reply
                0
                • T t.vanbesien

                  @JonB
                  I don't know ? I'm not sure I understand the question. I used

                  QOverload<...>::of<...>()
                  

                  because you wrote it in your first answer to this post. I can't find any documentation about it. If you want a working example I can share the class .cpp and .h of the class and the small debug function I made to make sure it is working properly. You can put it in an empty qt project to check.

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #10

                  @t-vanbesien said in no matching member function for call to 'connect':

                  because you wrote it in your first answer to this post.

                  Damn! So I did, I was guessing at that point! :( Now I know better, from the SO link I gave you :)

                  I suggest that you try copy/paste the following line to replace yours:

                  connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of(&QSignalMapper::map));
                  

                  Even though your ::of<>( apparently works, it should be ::of(. Don't confuse yourself by using my guessed-syntax, for when you come back to it.

                  T 1 Reply Last reply
                  1
                  • JonBJ JonB

                    @t-vanbesien said in no matching member function for call to 'connect':

                    because you wrote it in your first answer to this post.

                    Damn! So I did, I was guessing at that point! :( Now I know better, from the SO link I gave you :)

                    I suggest that you try copy/paste the following line to replace yours:

                    connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of(&QSignalMapper::map));
                    

                    Even though your ::of<>( apparently works, it should be ::of(. Don't confuse yourself by using my guessed-syntax, for when you come back to it.

                    T Offline
                    T Offline
                    t.vanbesien
                    wrote on last edited by
                    #11

                    @JonB

                    I replaced the line so that now it is:

                    connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of(&QSignalMapper::map));
                    

                    And everything is still working properly.

                    By the way, you wrote 'IOC' in one of your answers, what does it mean ?

                    JonBJ 1 Reply Last reply
                    1
                    • T t.vanbesien

                      @JonB

                      I replaced the line so that now it is:

                      connect(lineEdit, &QLineEdit::editingFinished, signalMapper, QOverload<>::of(&QSignalMapper::map));
                      

                      And everything is still working properly.

                      By the way, you wrote 'IOC' in one of your answers, what does it mean ?

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by
                      #12

                      @t-vanbesien said in no matching member function for call to 'connect':

                      By the way, you wrote 'IOC' in one of your answers, what does it mean ?

                      I wrote OIC => O-I-C => "Oh I See" :)

                      1 Reply Last reply
                      2

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved