Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;和RapidJson:定义没有文档的值_C++_Json_Rapidjson - Fatal编程技术网

C++ C++;和RapidJson:定义没有文档的值

C++ C++;和RapidJson:定义没有文档的值,c++,json,rapidjson,C++,Json,Rapidjson,我使用Rabijson解析我的C++应用程序中的JSON文件。 在我的json文件中有一个浮点值数组:threshs=[0.2,0.3]。 此数组存储为设置类的属性。类型为常量值*。如果需要访问数据,我可以调用(*设置->阈值)[I].GetFloat() 如果解析时出错,我希望使用在Settings.h中设置的默认值。这对于浮点、整数、布尔…来说非常有效。 问题是:如何在不创建文档的情况下手动创建常量值*。所以在我的头文件中,我想要s.th。比如: const Value* = {0.2, 0

我使用Rabijson解析我的C++应用程序中的JSON文件。 在我的json文件中有一个浮点值数组:
threshs=[0.2,0.3]
。 此数组存储为
设置
类的属性。类型为
常量值*
。如果需要访问数据,我可以调用
(*设置->阈值)[I].GetFloat()

如果解析时出错,我希望使用在
Settings.h
中设置的默认值。这对于
浮点、整数、布尔…
来说非常有效。 问题是:如何在不创建文档的情况下手动创建
常量值*
。所以在我的头文件中,我想要s.th。比如:

const Value* = {0.2, 0.3};
这可能吗?
我唯一的解决方案是将
thresh
的类型更改为向量,并在解析时循环json数组并将值复制到向量中

这段代码编译/运行时在我的设置中没有问题:

#include <iostream>

#include <rapidjson/allocators.h>
#include <rapidjson/document.h>
#include <rapidjson/prettywriter.h>
#include <rapidjson/rapidjson.h>

int main()
{
    using namespace std;
    using namespace rapidjson;

    Value val(kArrayType);

    //{
    MemoryPoolAllocator alloc;
    val.PushBack(Value(0.1).Move(), alloc);
    val.PushBack(Value(0.2).Move(), alloc);
    //}

    Document doc;
    doc.SetObject().AddMember("arr", val, doc.GetAllocator());

    StringBuffer sb;
    PrettyWriter<StringBuffer> writer(sb);
    doc.Accept(writer);
    cout << sb.GetString() << endl;

    return 0;
}
顺便说一句,如果您取消对
{
}
的注释,则在添加
值之前,分配器将被销毁,您将得到以下结果:

{
    "arr": [
        null,
        null
    ]
}

好的一面是,它不会崩溃。

这在文档中有解释:我看不到。我可以轻松创建空数组,但需要设置默认值。使用s.th。与此类似,a.PushBack(Value().SetInt(42),分配器)需要创建一个文档,而不需要使用文档的分配器。制作
内存池分配器分配器分配器
并在回拨呼叫中使用它。只需确保它存在(您的分配器),至少在您向文档添加值之前。值a(kArrayType)给出的“kArrayType”不是类型。我设置了“using namespace rapidjson”和“include”、“include”谢谢!现在可以了:)
{
    "arr": [
        null,
        null
    ]
}