2014-02-16 41 views
1

我正在学习C++并试图做出一些事情。但是我遇到了一个错误,我不知道发生了什么。我试图创建一个接受数组的简单东西,并将其转换为JSON。但我发现了一个错误QJsonValue是私人的吗?

'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]; 
} 

回答

6

你的问题是在这里:

data.prepend("Hello");

prepend成员函数需要一个QJsonValue,碰巧有很多构造函数。传入const char*会导致您指的是哪一个。 C++编译器会将其解析为bool,然后再将它们解析为QString。为了解决这个问题,的QJsonValue笔者这样做:

private: 
    // avoid implicit conversions from char* to bool 
    inline QJsonValue(const void*) {} 

在任何情况下,你可以通过更明确的解决这个问题:关于QStringLiteral更多信息

data.prepend(QStringLiteral("Hello")); // Qt 5 
data.prepend(QLatin1String("Hello")); // Qt 4, Latin1 string 
data.prepend(QString("Hello")); // Qt 4, non-Latin1 string 

here