'operator==' 不匹配(操作数类型为 QSerialPortInfo 和 const QSerialPortInfo)
no match for 'operator==' (operand types are QSerialPortInfo and const QSerialPortInfo)
以下代码是 QThread
的子类的一部分,我试图在其中发现任何新连接的串行端口。
void PortEnumerationThread::run ()
{
QList<QSerialPortInfo> port_list, discovered_ports;
discovered_ports = QSerialPortInfo::availablePorts();
int i;
while (1)
{
port_list = QSerialPortInfo::availablePorts();
for (i=0;i<port_list.size();i++)
{
if (!discovered_ports.contains(port_list.at(i)))
emit new_port_found (port_list.at(i).portName());
}
discovered_ports = port_list;
sleep ( SLEEP_TIME );
}
}
以上代码在第
if (!discovered_ports.contains(port_list.at(i)))
行抛出以下编译错误:
QtCore/qlist.h: error: no match for 'operator==' (operand types are
QSerialPortInfo and const QSerialPortInfo)
如果需要,您可以随时为 QSerialPortInfo
实施自己的 operator==
版本。不过,您需要确保它在代码的其他地方没有其他不良副作用。
类似...
#include <tuple>
#include <QList>
#include <QSerialPortInfo>
bool operator== (const QSerialPortInfo &a, const QSerialPortInfo &b)
{
return
std::forward_as_tuple(a.description(),
a.manufacturer(),
a.portName(),
a.productIdentifier(),
a.serialNumber())
==
std::forward_as_tuple(b.description(),
b.manufacturer(),
b.portName(),
b.productIdentifier(),
b.serialNumber());
}
您可能想要检查您认为对平等重要的属性子集——我只是粗略猜测。
以下代码是 QThread
的子类的一部分,我试图在其中发现任何新连接的串行端口。
void PortEnumerationThread::run ()
{
QList<QSerialPortInfo> port_list, discovered_ports;
discovered_ports = QSerialPortInfo::availablePorts();
int i;
while (1)
{
port_list = QSerialPortInfo::availablePorts();
for (i=0;i<port_list.size();i++)
{
if (!discovered_ports.contains(port_list.at(i)))
emit new_port_found (port_list.at(i).portName());
}
discovered_ports = port_list;
sleep ( SLEEP_TIME );
}
}
以上代码在第
if (!discovered_ports.contains(port_list.at(i)))
行抛出以下编译错误:
QtCore/qlist.h: error: no match for 'operator==' (operand types are QSerialPortInfo and const QSerialPortInfo)
如果需要,您可以随时为 QSerialPortInfo
实施自己的 operator==
版本。不过,您需要确保它在代码的其他地方没有其他不良副作用。
类似...
#include <tuple>
#include <QList>
#include <QSerialPortInfo>
bool operator== (const QSerialPortInfo &a, const QSerialPortInfo &b)
{
return
std::forward_as_tuple(a.description(),
a.manufacturer(),
a.portName(),
a.productIdentifier(),
a.serialNumber())
==
std::forward_as_tuple(b.description(),
b.manufacturer(),
b.portName(),
b.productIdentifier(),
b.serialNumber());
}
您可能想要检查您认为对平等重要的属性子集——我只是粗略猜测。