Я использую цикл for и хочу использовать итератор i в качестве ключа/имени при добавлении члена в документ. Например, я хочу, чтобы документ выглядел так:
{"1":"123.321","2":"456.654"}
Вот что я пробовал до сих пор.
<сильный>1. Преобразование i в const char*
rapidjson::Value newDouble(6);
for(int i = 0;i<laserScan.size();i++){
newDouble.SetDouble(laserScan[i]);
const char* index = std::to_string(i).c_str();
d.AddMember(index,newDouble,d.GetAllocator());
}
Это генерирует ошибку компилятора, сообщающую мне, что AddMember может принимать аргументы только типа rapidjson::GenericValue&:
error: no matching function for call to ‘rapidjson::GenericDocument<rapidjson::UTF8<> >::AddMember(const char*&, rapidjson::Value&, rapidjson::MemoryPoolAllocator<>&)’
d.AddMember(index,newDouble,d.GetAllocator());//add this name-value pair to the JSON string
<сильный>2. Преобразование i в строку с использованием типов rapidjson
rapidjson::Value newDouble(6), newStringIndex(5);
for(int i = 0;i<laserScan.size();i++){
newDouble.SetDouble(laserScan[i]);
const char* index = std::to_string(i).c_str();
size = (rapidjson::SizeType)std::strlen(index);
newStringIndex.SetString(rapidjson::StringRef(index,size));
d.AddMember(newStringIndex,newDouble,d.GetAllocator());
}
Это вызывает следующую ошибку времени выполнения из класса Writer:
Assertion `!hasRoot_' failed.
Почему я запутался
Разве решение № 1 не должно быть таким же, как и следующее?
d.AddMember("1",newDouble,d.GetAllocator());
Это работает, когда я пытаюсь это сделать, но я не могу понять, почему преобразование целого числа в const char* не будет.