我正在使用快速JSON来解析基于C ++回合的RPG的对象敌人,并且我遇到了一些奇怪的错误

时间:2017-08-26 18:25:06

标签: c++ json rapidjson

我有一些Json文件代表我试图访问的游戏中的敌人并复制到C ++变量中。

 {
    "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行< / p>

编辑:我发现答案是.HasMember我指的是错误的单词而不是它应该是Doc.HasMember(“Class”)而不是

1 个答案:

答案 0 :(得分:0)

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

出现此错误的原因 - 类型是Wolf的子项,因此应该以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"));