RapidJSON을 컴파일하는 동안 오류가 발생하는 이유
Nov 14 2020
RapidJSON을 사용하여 JSON 파일을 구문 분석하면 이러한 오류가 발생합니다.
이것은 JSON 파일의 일부입니다.
{
"header":{
"protocolVersion":2,
"messageID":2,
"stationID":224
},
"cam":{
"generationDeltaTime":37909,
"camParameters":{
"basicContainer":{
"stationType":5,
이것은 코드입니다
doc.Parse(pr);
const auto& header = doc["header"];
header.protocolVersion = doc["header"]["protocolVersion"].GetInt();
header.messageID = doc["header"]["messageID"].GetInt();
header.stationID = doc["header"]["stationID"].GetInt();
const auto& cam = doc["cam"];
cam.camParameters.basicContainer.stationType = doc["cam"]["camParameters"]["basicContainer"]["stationType"].GetInt();
const auto& referencePosition = doc["cam"]["camParameters"]["basicContainer"]["referencePosition"];
이 오류가 발생합니다. 회원이 없다는 내용이 무엇인지 모르겠습니다.
In member function ‘void MqttApplication::sendm(const std::__cxx11::basic_string<char>&)’:
.cpp:389:12: error: ‘const class rapidjson::GenericValue<rapidjson::UTF8<> >’ has no member named ‘protocolVersion’
389 | header.protocolVersion = doc["header"]["protocolVersion"].GetInt();
| ^~~~~~~~~~~~~~~
mqtt_application.cpp:390:12: error: ‘const class rapidjson::GenericValue<rapidjson::UTF8<> >’ has no member named ‘messageID’
390 | header.messageID = doc["header"]["messageID"].GetInt();
| ^~~~~~~~~
mqtt_application.cpp:391:12: error: ‘const class rapidjson::GenericValue<rapidjson::UTF8<> >’ has no member named ‘stationID’
391 | header.stationID = doc["header"]["stationID"].GetInt();
| ^~~~~~~~~
mqtt_application.cpp:402:9: error: ‘const class rapidjson::GenericValue<rapidjson::UTF8<> >’ has no member named ‘generationDeltaTime’
402 | cam.generationDeltaTime = doc["cam"]["generationDeltaTime"].GetInt();
| ^~~~~~~~~~~~~~~~~~~
mqtt_application.cpp:405:9: error: ‘const class rapidjson::GenericValue<rapidjson::UTF8<> >’ has no member named ‘camParameters’
405 | cam.camParameters.basicContainer.stationType = doc["cam"]["camParameters"]["basicContainer"]["stationType"].GetInt();
답변
a1ezh Nov 15 2020 at 10:33
header
rapidjson::Value
유형의 객체이며 protocolVersion
, messageID
및 stationID
멤버 가 없습니다 . 에서 값을 저장할 사용자 지정 개체 유형을 제공해야합니다 header
. 다른 변수 ( cam
및 referencePosition
)도 마찬가지 입니다. 예를 들면 :
struct MessageHeader
{
int protocolVersion;
int messageID;
int stationID;
};
//...
const auto& header = doc["header"];
MessageHeader messageHeader;
messageHeader.protocolVersion = header["protocolVersion"].GetInt();
messageHeader.messageID = header["messageID"].GetInt();
messageHeader.stationID = header["stationID"].GetInt();
std::cout << "message header protocol version: " << messageHeader.protocolVersion << std::endl;