我正在学习 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];
}
最佳答案
你的问题在这里:
data.prepend("你好");
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
的更多信息。
关于c++ - QJsonValue 是私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816908/