QT CPP如何解决调用函数时的歧义错误



我有一个使用串行端口写入数据的函数。我在几个页面上使用send函数。我以前从未遇到过这样的问题,但当我试图在同一页面上再次使用它时,我遇到了一个错误。当我再次尝试调用功能时,我得到了

error: call of overloaded 'send(const char [6])' is ambiguous

这是我的头文件

#ifndef SETDATETIME_H
#define SETDATETIME_H
#include <QDialog>
#include <QTimer>
#include "serial.h"
namespace Ui {
class setdatetime;
}
class setdatetime : public QDialog
{
Q_OBJECT
public:
explicit setdatetime(QWidget *parent = nullptr);
~setdatetime();
void closeEvent(QCloseEvent *event);
public slots:

void curtime();
private slots:
void on_pushButton_clicked();

void on_detailSaveBtn_clicked();
private:
Ui::setdatetime *ui;
QTimer *timer;
Serial serialDateTime;
};
#endif // SETDATETIME_H

这是我收到错误的函数

void setdatetime::on_detailSaveBtn_clicked() {
QSerialPortInfo info;
QList<QSerialPortInfo> infoList = QSerialPortInfo::availablePorts();
foreach(info, infoList) QTextStream(stdout) << info.portName();
QString curport = info.portName();
if (!serialDateTime.isOpen()) {
if (serialDateTime.begin(QString(curport), 9600, 8, 0, 1, 0, false)) {
serialDateTime.send("HELLO"); // call to member function 'send' is ambiguous
serialDateTime.send(ui -> label -> text().toLatin1() + ui -> label_2 -> text().toLatin1()); //this working well
}
}
}
here is send function
bool Serial::send(QString message)
{
if (this->serialDevice->isOpen() && this->serialDevice->isWritable())
{
this->serialDevice->write(message.toStdString().c_str());
return true;
}
else
{
return false;
}
}

bool Serial::send(const QByteArray &message)
{
if (this->serialDevice->isOpen() && this->serialDevice->isWritable())
{
this->serialDevice->write(message);
return true;
}
else
{
return false;
}
}

我该如何解决这个问题?

警告有很多含义。在您的情况下,假设您的字符串literal"HELLO"const char[6],但可以隐式转换为QByteArray或QString。

问题是你的编译器不喜欢这样,更喜欢明确地知道该做什么

您可以使用explicit关键字来禁止隐式强制转换,也可以直接传递显式转换的QByteArrayQString,以使编译器知道您要使用一个或另一个定义。

serialDateTime.send(QByteArray::fromRawData("HELLO", 5)); // to call the QByteArray overload
serialDateTime.send(QString::fromUtf8("HELLO")); // to call the QString overload