Разбор XML-файла в C++ с использованием RapidXML с Dev C++

Итак, мне нужно разобрать файл XML для моего проекта C++ в классе, и я использую RapidXML. Файл rapidxml_iterators.hpp вызывает у меня некоторые проблемы. Кстати, я использую Dev C++

Сначала у меня был следующий код:

typedef typename xml_node<Ch> value_type;
typedef typename xml_node<Ch> &reference;
typedef typename xml_node<Ch> *pointer;
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;

Внутри моего main.cpp я сделал: #include "rapidxml_iterators.hpp" и выдал ожидаемую ошибку спецификатора вложенного имени, когда я пытался его скомпилировать. Я следовал инструкциям из компилировать rapidxml под linux с помощью g++ и изменил код с сверху до следующего:

typedef xml_node<Ch> value_type;
typedef xml_node<Ch> &reference;
typedef xml_node<Ch> *pointer;
typedef typename std::ptrdiff_t difference_type;
typedef typename std::bidirectional_iterator_tag iterator_category;

Теперь он дает мне эти ошибки:

-нет шаблона класса с именем ptrdiff_t' instd' -ISO C++ запрещает объявление `difference_type' без типа

Если у кого-нибудь есть какие-либо идеи о том, как исправить этот код, я был бы вечно благодарен. Заранее спасибо!


person user2137877    schedule 05.03.2013    source источник
comment
Другие ошибки: ISO C++ forbids the declaration of difference_type with no type и no class template named bidirectional_iterator_tag in std, а остальные ошибки - просто повторяющиеся экземпляры этих двух, но с разными вещами, такими как iterator_category   -  person user2137877    schedule 06.03.2013


Ответы (1)


Вам не хватает определения std::ptrdiff_t. Таким образом, компилятор говорит вам, что вы не можете typedef его, так как он не определен.

Просто включите правильный заголовок в начало файла, и все будет хорошо (только с этой ошибкой!), то есть добавьте:

#include <cstddef>
person Qortex    schedule 06.03.2013
comment
Эй, большое спасибо за ваш ответ! Теперь я больше не получаю ошибку std::ptrdiff_t, но она по-прежнему дает мне следующие проблемы: ISO C++ forbids the declaration of difference_type with no type и no class template named bidirectional_iterator_tag in std, а остальные ошибки - это просто повторяющиеся экземпляры этих двух - person user2137877; 06.03.2013
comment
Окей круто. Затем, пожалуйста, отметьте это как ответ, чтобы этот вопрос был закрыт, и откройте новую тему со своими новыми проблемами, если хотите. - person Qortex; 06.03.2013
comment
На самом деле, нет, он все еще дает мне ошибку std::ptrdiff_t. ух ты - person user2137877; 06.03.2013
comment
любые другие предложения? Я не знаю. Это из-за Dev C++? - person user2137877; 06.03.2013
comment
найдите заголовок cstddef в своей системе и посмотрите, что внутри. Определяет ли это std::ptrdiff_t? Может быть, вам нужно включить флаг? Разместите свой заголовок на pastebin и опубликуйте его как обновление вашего первоначального сообщения. - person Qortex; 06.03.2013
comment
Где бы я мог проверить заголовок? - person user2137877; 07.03.2013
comment
зависит от вашей системы, проверьте место стандартного заголовка или просто выполните поиск имени файла в нужном заголовке. - person Qortex; 07.03.2013