У меня проблема, аналогичная предыдущему вопросу (см. Разбор объекта внутри массива в rapidjson ), где я пишу рекурсивную функцию для обхода произвольного дерева JSON, и я попробовал предложенный ответ, но моему компилятору C++ это не нравится.
Я объявил функцию
void traverseObject(const Value& v) {
if (v.IsObject()) {
// . . .
}
else if (v.IsArray()) {
// . . .
}
}
Как вы и предложили (для ясности я не учел некоторый синтаксис пространства имен, который должен использовать моя реализация). Однако при рекурсивном вызове с помощью Value::ConstMemberIterator itr как
traverseObject(itr->value);
или с помощью Value::ConstValueIterator itr как
traverseObject(*itr);
мой компилятор С++ выдает ошибку
Invalid arguments ' Candidates are: void traverseObject(rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>> &) '
Я признаю, что новичок в C++ (большая часть моего опыта ООП связана с Java), поэтому я одновременно поднимаюсь по более чем одной кривой обучения здесь. Почему эта функция требует, чтобы я вызывал ее с помощью распределителя, если я просто вызываю ее с помощью объекта по ссылке? Я также просмотрел документы RapidJSON, и ни в одном из примеров не упоминается использование распределителя с вызовами методов, поэтому я, вероятно, упускаю здесь что-то основное из-за моего новичка в C++, но любые предложения будут полезны.
Если это поможет, я использую Eclipse C++ Development Toolkit и компилятор MinGW в Windows 7. Эта комбинация была болезненной в других отношениях, которые я не буду здесь рассматривать, но мне очень нравятся инструменты Eclipse для анализа кода и рефакторинга. Я открыт для использования других IDE, которые предлагают сопоставимые функции.
Большое спасибо за вашу помощь.
Эрик