2015-10-14 19:50 GMT+02:00 Bob Hood <bho...@comcast.net>: > I'm having an odd compiler error using the new-style connect() and > disconnect() with a QTcpSocket object. I'm working under Linux with Qt 5.5.0 > and QtCreator. I built Qt 5.5.0 myself without modifications, and then built > QtCreator against it. > > Given a QSharedPointer<QTcpSocket> called 'stream', the connect() code looks > like: > > connect(stream.data(), &QTcpSocket::readyRead, this, > &TCPChannel::slot_data_available); > connect(stream.data(), &QTcpSocket::disconnected, this, > &TCPChannel::slot_client_lost); > connect(stream.data(), &QTcpSocket::stateChanged, this, > &TCPChannel::slot_state_changed); > connect(stream.data(), &QTcpSocket::error, this, > &TCPChannel::slot_socket_error); > > The error occurs on the last line with QTcpSocket::error (none of the other > lines create errors. My disconnect code looks like: > > disconnect(stream.data(), &QTcpSocket::readyRead, this, > &TCPChannel::slot_data_available); > disconnect(stream.data(), &QTcpSocket::disconnected, this, > &TCPChannel::slot_client_lost); > disconnect(stream.data(), &QTcpSocket::stateChanged, this, > &TCPChannel::slot_state_changed); > disconnect(stream.data(), &QTcpSocket::error, this, > &TCPChannel::slot_socket_error); > > where a similar error occurs on the last line with QTcpSocket::error. > > The error for the connect() call states: > > ../../../Common/Source/Channel.cpp: In member function 'virtual void > SPlay::TCPChannel::connect_channel()': > ../../../Common/Source/Channel.cpp:104:90: error: no matching function for > call to 'SPlay::TCPChannel::connect(QTcpSocket*, <unresolved overloaded > function type>, SPlay::TCPChannel* const, void > (SPlay::TCPChannel::*)(QAbstractSocket::SocketError))' > result = connect(stream.data(), &QTcpSocket::error, this, > &TCPChannel::slot_socket_error); > ^ > and then later in the output: > > /usr/local/qt/5.5.0/64_dll/include/QtCore/qobject.h:254:13: note: > template argument deduction/substitution failed: > ../../../Common/Source/Channel.cpp:104:90: note: couldn't deduce > template parameter 'Func1' > result = connect(stream.data(), &QTcpSocket::error, this, > &TCPChannel::slot_socket_error); > ^ > ^ > and disconnect(): > > ../../../Common/Source/Channel.cpp: In member function 'virtual void > SPlay::TCPChannel::disconnect_channel()': > ../../../Common/Source/Channel.cpp:115:85: error: no matching function for > call to 'SPlay::TCPChannel::disconnect(QTcpSocket*, <unresolved overloaded > function type>, SPlay::TCPChannel* const, void > (SPlay::TCPChannel::*)(QAbstractSocket::SocketError))' > disconnect(stream.data(), &QTcpSocket::error, this, > &TCPChannel::slot_socket_error); > ^ > > "SPlay" is a namespace, and my slots (within that namespace) look like: > > protected slots: > virtual void slot_data_available(); > virtual void slot_client_lost(); > void slot_state_changed(QAbstractSocket::SocketState state); > void slot_socket_error(QAbstractSocket::SocketError error); > > I also tried substituting "QAbstractSocket" for "QTcpSocket" in the code, and > that had no effect--same errors with different names. > > Any insights as to why only that single signal is giving me grief? I'm sure > it's something obvious that I'm overlooking. This same code using the > old-style connect works fine under Windows using Qt 5.5.0.
I believe it is because QAbstractSocket::error is an overloaded function, so it is ambiguous in your connect/disconnect calls. It needs to be statically casted :/ See e.g: https://wiki.qt.io/New_Signal_Slot_Syntax#Overload Cheers, Elvis > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest