我正在学习C ++并试图创造一些东西。但我遇到了一个错误,我不确定是什么。我试图创建一个接受数组的简单事物,并将其转换为JSON。但是我收到了错误
'QJsonValue::QJsonValue(const void*)' is private
within this context
文件
#include "LoginDialog.h"
#include "ui_LoginDialog.h"
LoginDialog::LoginDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::LoginDialog)
{
setWindowFlags(Qt::FramelessWindowHint);
ui->setupUi(this);
}
LoginDialog::~LoginDialog()
{
delete ui;
}
void LoginDialog::set_socket(Socket *socket)
{
socket = socket;
QJsonArray data;
data.prepend("Hello");
socket->sendData(data);
}
void LoginDialog::on_minimize_clicked()
{
setWindowState(Qt::WindowMinimized);
}
void LoginDialog::on_quit_clicked()
{
exit(1);
}
接受功能
void Socket::sendData(QJsonArray data)
{
qDebug() << data[1];
}
答案 0 :(得分:9)
你的问题在这里:
data.prepend("Hello");
prepend
成员函数接受QJsonValue
,恰好有许多构造函数。传入const char*
会使您指的是哪一个模糊不清。 C ++编译器会将其解析为bool
,然后才能将其解析为QString
。为了解决这个问题,QJsonValue
的作者做到了这一点:
private:
// avoid implicit conversions from char* to bool
inline QJsonValue(const void*) {}
无论如何,您可以通过更明确地解决此问题:
data.prepend(QStringLiteral("Hello")); // Qt 5
data.prepend(QLatin1String("Hello")); // Qt 4, Latin1 string
data.prepend(QString("Hello")); // Qt 4, non-Latin1 string
查看here,了解有关QStringLiteral
。