2017-08-26 39 views
0

我有一些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(「類」)),而不是

+0

建議你嘗試附加調試器?至少發佈堆棧跟蹤。 – tambre

+0

我想健康是int,應該重試使用GetInt嘗試斷言元素的類型不僅它的存在斷言(Doc [「Health」]。IsNumber()); assert(Doc [「Health」]。IsDouble()); –

+0

@tambre剛剛編輯我的帖子 – user2350585

回答

0
the error in the terminal: Assertion failed: Doc.HasMember("Type") 

這樣做的原因錯誤 - 類型是所以它應該作爲Doc [「Wolf」] [「Type」]訪問,並且斷言應該看起來像

assert(Doc.HasMember("Wolf")); 
assert(Doc["Wolf"].HasMember("Type")); 

或者從user2350585

assert(Doc.HasMember("Wolf")); 
auto Wolf = Doc["Wolf"]; 
assert(Wolf.HasMember("Type")); 
相關問題