2017-08-26 32 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")); 
相关问题