几个星期前,我在我的Windows笔记本写了一个小JSON-RPC FPGA实现基于C++和Qt。我使用了Visual C++ 2013编译器,它没有任何问题。C++/QT - 可选参数默认为NULL
现在我复制我的代码的Linux Mint的机器与GCC编译器,我总是得到以下错误:
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的,所以我不明白,为什么这不起作用,althought它工作在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
什么是QJsonValue的类型?我猜它是代表另一种类型的typedef。查找QJsonValue的定义位置(在QtCore包含中)。最有可能的是,它在Linux和Windows上的定义不同。 –
这很可能是因为QJsonValue可以从Windows上不同的两种类型构建而成,但在Linux上是相同的。例如,如果您有time_t的过载,这将是在Windows,这是从长整型(这是在Windows 32位)不同的Int64,而在Linux上相同的time_t实际上可能是一个长整型,从而给你两无法相互区分的重载。 –
我抬头看看QJsonValue。我错了,它不是一个typedef。由于它是一个类,请与ddriver的答案一起去。这可能会起作用。 –