幾個星期前,我在我的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的答案一起去。這可能會起作用。 –