Функция с параметром rapidjson::Value& требует распределителя при вызове

У меня проблема, аналогичная предыдущему вопросу (см. Разбор объекта внутри массива в 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, которые предлагают сопоставимые функции.

Большое спасибо за вашу помощь.

Эрик


person Eric J    schedule 23.11.2015    source источник
comment
Ваш код кажется правильным. Можете ли вы опубликовать более полный код?   -  person Milo Yip    schedule 24.11.2015
comment
Я думаю, что моя установка Eclipse ненадежна. Я установил Visual Studio 2015 с C++, и он работает в этой среде. Возможно, мне придется переустановить Eclipse/MinGW. У Eclipse/MinGW есть и другие проблемы с RapidJSON, такие как пометка строки 168 файла rapidjson.h: #define RAPIDJSON_LITTLEENDIAN 0 //!‹ Машина с прямым порядком байтов с ошибкой, в которой отсутствует бинарный оператор перед токеном 0, из-за чего все здесь ломают головы. Это произошло через некоторое время после того, как у него не было проблем, а затем внезапно возникла эта ошибка, в то же время она обнаружила ошибку, которую я описал в этом посте.   -  person Eric J    schedule 24.11.2015
comment
Я могу опубликовать это как отдельный вопрос, если я не решу проблему с Eclispe в ближайшее время. В какой-то момент это должно работать в среде, отличной от Microsoft Visual Studio. Eclipse — моя любимая IDE.   -  person Eric J    schedule 24.11.2015