• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

RapidXml, błędy w kodzie biblioteki

Object Storage Arubacloud
0 głosów
283 wizyt
pytanie zadane 14 sierpnia 2017 w C i C++ przez niezalogowany
edycja 14 sierpnia 2017

Pobrałem sobie RapidXml naszego rodaka stąd http://rapidxml.sourceforge.net/

(cztery pliku nagłówkowe, które załączyłem do mojego projektu).

Tak wygląda mój kod

#include <memory>
#include <iostream>
#include <fstream>
#include <vector>
#include "rapidxml.hpp"
#include "rapidxml_iterators.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_utils.hpp"

using namespace std;
using namespace rapidxml;

int main()
{
    // moj kod
    string zawartosc = "";
    fstream plik;
    string linia;
    plik.open("slowka.xml", ios::in);
    while(getline(plik,linia))
        zawartosc += linia;
    plik.close();

    // fragment z Manual, rozdział 2
    xml_document<> doc;    // character type defaults to char
    doc.parse<0>(zawartosc.c_str());    // 0 means default parse flags

    cout << "Name of my first node is: " << doc.first_node()->name() << "\n";
    xml_node<> *node = doc.first_node("foobar");
    cout << "Node foobar has value " << node->value() << "\n";
    for ( xml_attribute<> *attr = node->first_attribute(); attr; attr = attr->next_attribute() )
    {
        cout << "Node foobar has attribute " << attr->name() << " ";
        cout << "with value " << attr->value() << "\n";
    }

    return 0;
}

I wywala 21 błędów

http://zapisz.net/view.php?filename=728_przechwytywanie.png

Jak usunę mój kod i dam tak jak jest w manual czyli

doc.parse<0>(text);

To też nie działa, bo wiadomo, nie zadeklarowałem nigdzie zmiennej text (nie wiem jakiego typu ma niby być, jak const char* to przecież zawartosc.c_str() powinno działać), ale przede wszystkim wykazuje błędy w kodzie biblioteki.

Ktoś pomoże?

EDIT

Zmieniłem kod

typedef typename xml_node<Ch> value_type;
typedef typename xml_node<Ch> &reference;
typedef typename xml_node<Ch> *pointer;

na

typedef xml_node<Ch> value_type;
typedef xml_node<Ch> reference;
typedef xml_node<Ch> pointer;

i teraz jest jeden błąd związany z linijką

doc.parse<0>(zawartosc.c_str());    // 0 means default parse flags

no matching function...

1 odpowiedź

0 głosów
odpowiedź 15 sierpnia 2017 przez j23 Mędrzec (194,920 p.)
edycja 15 sierpnia 2017 przez j23

Wywal jedynie typename, & i * muszą zostać.

parse zmienia zawartość bufora podanego w parametrze, dlatego nie możesz jej dać adresu zwróconego przez c_str(). Zrób tak:

vector<char> v;
	
ifstream ifs("slowka.xml");

copy(istream_iterator<char>(ifs), istream_iterator<char>(), back_inserter(v));
v.push_back('\0');

doc.parse<0>(&v.front());
...

 

PS. nie jest to może najszybsza metoda czytania pliku do pamięci, ale na potrzeby przykładu wystarczająca.

Podobne pytania

0 głosów
0 odpowiedzi 132 wizyt
pytanie zadane 26 października 2020 w Inne języki przez Lyokoheros Początkujący (340 p.)
0 głosów
0 odpowiedzi 360 wizyt
pytanie zadane 7 lutego 2018 w JavaScript przez Anoonymous Obywatel (1,560 p.)
0 głosów
1 odpowiedź 1,060 wizyt
pytanie zadane 27 października 2016 w JavaScript przez Newperty Początkujący (280 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...