几周前,我在基于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);
此错误也出现在第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
答案 0 :(得分:5)
NULL可能在两个平台上以不同的方式实现。 “有问题”的实现会产生歧义,因为有多个可能的隐式转换候选者。
而不是JsonValue parameters = NULL
try JsonValue parameters = JsonValue()
- 该构造函数将创建一个null类型的json值。
此外,即使JsonValue parameters = NULL
“有效”,它也可能是错误的,因为它等于JsonValue(int(0))
而不是JsonValue()
中的“null”json值。有一个默认的QJsonValue::Type::Null
参数。所以你不会有一个NULL json值,而是一个NUMBER json值,值为0 - 两个完全不同的东西。