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

标签 c++ linux qt gcc

几周前,我在我的 Windows Notebook 上基于 C++ 和 Qt 编写了一个小的 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);

这个错误也出现在第 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

最佳答案

NULL 可能在两个平台上以不同的方式实现。 “有问题的”实现会产生歧义,因为隐式转换的可能候选对象不止一个。

尝试使用 JsonValue parameters = JsonValue() 而不是 JsonValue parameters = NULL - 该构造函数将创建一个 null 类型的 json 值。

此外,即使 JsonValue parameters = NULL “有效”,它也可能是错误的,因为它等于 JsonValue(int(0)) 和不是像 JsonValue() 那样的“空”json 值,它有一个默认的 QJsonValue::Type::Null 参数。所以你不会有一个 NULL json 值,而是一个值为 0 的 NUMBER json 值 - 两个完全不同的东西

关于C++/Qt - 可选参数默认为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35707500/

相关文章:

linux - 如何构建 vintage-1999 软件以在当前的 Ubuntu 上运行?

c++ - QTableView委托(delegate)小数点后的数字

c++ - Qt 声子视频播放器示例 C++ 或 python

c++ - 如果页面是从 Qt RCC 资源系统加载的,QWebEngineView 不会从 html 页面加载相关资源

c++ - 如何在 Pocket PC 上显示/隐藏 SIP

c++ - 使用 C++ 逐个选项卡拆分字段

linux - 通过组合其他三列中的字符串来创建新列

c++ - 功能覆盖在哪里完成?

c++ - 如何提升cocos2dx中位图纹理渲染的性能

linux - 我正在尝试编写一个 shell 命令来查找并编译所有 C 程序