найти дочерний элемент с быстрым xml

Я пытаюсь получить дочерний элемент простого xml, но он работает неправильно. Я получаю исключение времени выполнения: Access violation reading location 0x0000000. Я просто пытаюсь получить к нему доступ следующим образом:

Config::Config()
{
    rapidxml::file<> xmlFile("config.xml"); 
    rapidxml::xml_document<> m_doc;
    m_doc.parse<0>(xmlFile.data());
    LOG(m_doc.first_node()->name());//simple cout makro
    LOG(findNode("test")->value()); 
}

xml_node<>* Config::findNode(const char* name)
{
    LOG("looking for "<< name);
    return m_doc.first_node()->first_node(name);
}

XML простой:

<root>
    <test>test</test>
</root>

Я получаю лог для корневого элемента из строки LOG(m_doc.first_node()->name()); и лог из "ищу". Я понятия не имею, что я делаю неправильно? Я получаю первый элемент, который должен быть корневым (и регистратор говорит об этом), а затем я пытаюсь найти первого дочернего элемента с именем test. Который должен иметь значение test. Я также получаю такое же исключение, если пытаюсь напечатать имя или что-то в этом роде.


ОБНОВЛЕНИЕ: я только что попробовал LOG(m_doc.first_node()->first_node("test")->value()); и это действительно возвращает правильное значение. Но я не могу вызвать свой метод для этого. Что я сделал не так с методом? Любая подсказка? LOG(findNode("test")->value()); не работает . Значит что-то с ним не так.


person BennX    schedule 16.04.2014    source источник


Ответы (1)


Вы (пере)объявили m_doc как локальную переменную в Config::Config, скрывая то, что предположительно является переменной-членом. Просто избавьтесь от этой декларации.

person ooga    schedule 16.04.2014
comment
я в полном замешательстве. Я только что попробовал LOG(m_doc.first_node()->first_node("test")->value());, и это возвращает правильное значение. Но я не могу вызвать свой метод для этого. Что я сделал не так с методом? Любая подсказка? LOG(findNode("test")->value()); не работает - person BennX; 16.04.2014
comment
@BennX Кажется, я заметил твою ошибку. Смотрите обновленный ответ выше. - person ooga; 16.04.2014
comment
да, верно ... cpp для меня все еще нов, и я всегда забываю не объявлять его снова, если он находится в заголовочном файле. Большое спасибо! - person BennX; 16.04.2014