我有一些Json文件代表遊戲中的敵人,我嘗試訪問並複製到C++變量中。我正在使用快速JSON來解析一個基於C++回合的RPG對象,並且出現了一些奇怪的錯誤
{
"Wolf": {
"Type": 0,
"ID": 0,
"Level": 1,
"Name": "Wolf",
"Health": 100,
"Strength": 20,
"Speed": 35,
"Exp": 20,
"Defense": 30,
"Sprite": "Assets/Wolf_Sprite.png",
"Status": "Normal"
}
}
下面是我的代碼的相關部分
#pragma once
#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/filereadstream.h"
/******************************
* The Base Values of the enemy.
*******************************/
using namespace rapidjson;
class EnemyType
{
private:
std::string Name;
std::string FileName;
int ID;
int Level;
double expGiven;
double Health;
double Speed;
double Strength;
double Defense;
Document Doc;
public:
EnemyType()
{
FILE* pFile = fopen("Assets/Enemy_List/0.json", "rb");
char buffer[65536];
FileReadStream is(pFile, buffer, sizeof(buffer));
Doc.ParseStream<0, UTF8<>, FileReadStream>(is);
assert(Doc.IsObject());
assert(Doc.HasMember("Type"));
assert(Doc.HasMember("ID"));
assert(Doc.HasMember("Level"));
assert(Doc.HasMember("Name"));
assert(Doc.HasMember("Health"));
Health = Doc["Health"].GetDouble();
}
的問題是文件本身打開正確的,並傳遞則IsObject斷言,但是過去的事情,將無故障崩潰...任何幫助將不勝感激。
從堆棧窗口ucrtbased.dll!issue_debug_notification(const wchar_t * const message)行125 C++非用戶代碼。符號加載。
終端錯誤:聲明失敗:Doc.HasMember(「Type」),文件c:\ users \ timothy \ documents \ visual studio 2017 \ projects \ musungo game \ musungo game \ enemytype.h,第36行
編輯:我找到了答案是.HasMember我是指定了錯誤的單詞,而不是它應該是Doc.HasMember(「類」)),而不是
建議你嘗試附加調試器?至少發佈堆棧跟蹤。 – tambre
我想健康是int,應該重試使用GetInt嘗試斷言元素的類型不僅它的存在斷言(Doc [「Health」]。IsNumber()); assert(Doc [「Health」]。IsDouble()); –
@tambre剛剛編輯我的帖子 – user2350585