2014-02-16 2 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*) {} 

В любом случае, вы можете решить эту проблему, будучи более явным:

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

Look here для получения дополнительной информации о QStringLiteral.

Смежные вопросы