C++/Qt - 可选参数默认为NULL

Che*_*esi 3 c++ linux qt gcc

几周前,我在基于C++和Qt的Windows笔记本上写了一个小JSON-RPC实现.我使用Visual C++ 2013编译器,它没有任何问题.

现在我将我的代码复制到带有GCC编译器的Linux Mint机器上,我总是得到以下错误:

jsonrpc.h:18: Error: conversion from 'long int' to 'QJsonValue' is ambiguous
     static QJsonObject generateErrorObj(ErrorCode code, QString message, QJsonValue data = NULL);
Run Code Online (Sandbox Code Playgroud)

此错误也出现在第19行(方法generateErrorResponse)和第20行(方法generateRequest).所以...现在我不熟悉C++或Qt,所以我不明白,为什么这不起作用,虽然它在Windows上运行...

这是jsonrpc.h的完整代码:

#ifndef JSONRPC_H
#define JSONRPC_H

#include <QtCore>

class JSONRPC
{
public:
    enum ErrorCode
    {
        PARSE_ERROR = -32700,
        INVALID_REQUEST = -32600,
        METHOD_NOT_FOUND = -32601,
        INVALID_PARAMS = -32602,
        INTERNAL_ERROR = -32603
    };
    static QJsonObject generateObj(QString id, bool isNotification = false);
    static QJsonObject generateErrorObj(ErrorCode code, QString message, QJsonValue data = NULL);
    static QJsonObject generateErrorResponse(QString id, ErrorCode code, QString message, QJsonValue data = NULL);
    static QJsonObject generateRequest(QString id, QString method, QJsonValue parameters = NULL, bool isNotification = false);
    static QJsonObject generateResponse(QString id, QJsonValue result);
};

#endif // JSONRPC_H
Run Code Online (Sandbox Code Playgroud)

dte*_*ech 5

在两个平台上可能以不同的方式实现NULL."有问题"的实现会产生歧义,因为隐式转换有多个可能的候选者.

而不是JsonValue parameters = NULL尝试JsonValue parameters = JsonValue()- 该构造函数将创建类型为null的json值.

此外,即使JsonValue parameters = NULL"有效",它也可能是错误的,因为它将等于类似的东西,JsonValue(int(0))而不是JsonValue()具有默认QJsonValue::Type::Null参数的"null"json值.所以你不会有一个NULL的json值,而是一个值为0的NUMBER json值 - 两个完全不同的东西.