QJsonValue是私有的吗?

时间:2014-02-16 21:29:06

标签: c++ qt

我正在学习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];
}

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

的更多信息