problem podczas kompilacji programu z lekcji o bibliotece RapidXML
Ostatnio zmodyfikowano 2013-10-12 22:20
tookie009 Temat założony przez niniejszego użytkownika |
problem podczas kompilacji programu z lekcji o bibliotece RapidXML » 2013-10-12 20:33:34 ( Udało mi się zlinkować bibliotekę curl ), ażeby móc wykonać program z strony http:cpp0x.plartykuly?id=50niestety otrzymuje nadal błędy:
1>Build started 2013-10-12 19:57:07. 1>InitializeBuildStatus: 1> Touching "Debug\xmlzstrony.unsuccessfulbuild". 1>ClCompile: 1> xmlzstrony.cpp 1>xmlzstrony.cpp(52): warning C4244: 'initializing' : conversion from '__int64' to 'unsigned int', possible loss of data 1>xmlzstrony.cpp(58): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Spotkał się ktoś już z czymś takim? Czy winą może być nieodpowiednia wersja zlib ? EDIT: mój kod: #include <iomanip> #include <iostream> #include <memory> #include <string>
#include "curl/include/curl/curl.h" #include "rapidxml.hpp" #include "rapidxml_print.hpp" #include "rapidxml_utils.hpp"
using namespace std; using namespace rapidxml;
static string buffer;
inline static int string_writer( char * data, size_t size, size_t nmemb, string * buffer ) { int result = 0; if( buffer != NULL ) { buffer->append( data, size * nmemb ); result = size * nmemb; } return result; }
inline static char * pobierzStrone( char * strona ) { bool byl_problem = false; do { buffer.reserve( 10000 ); buffer.clear(); CURL * curl; CURLcode result; curl = curl_easy_init(); if( curl ) { curl_easy_setopt( curl, CURLOPT_URL, strona ); curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, string_writer ); curl_easy_setopt( curl, CURLOPT_WRITEDATA, & buffer ); result = curl_easy_perform( curl ); if( result == CURLE_OK ) byl_problem = false; else { cout << "!Wystapil blad podczas pobierania strony, powtarzam czynnosc!\n"; byl_problem = true; } curl_easy_cleanup( curl ); } } while( byl_problem ); long long N = buffer.length(); char * out = new char[ N + 1 ]; ::copy( buffer.c_str(),( buffer.c_str() + N - 1 ), out ); out[ N - 1 ] = '\0'; return out; }
main() { char countries_address[] = "http://api.erepublik.com/v2/feeds/countries"; auto_ptr < char > tresc_strony( pobierzStrone( countries_address ) ); xml_document <> dokument; try { dokument.parse < 0 >( tresc_strony.get() ); } catch( parse_error p ) { p.what(); } xml_node <> * kraje = dokument.first_node(); unsigned ilosc_krajow = count_children( kraje ); cout << "Mamy w grze: " << ilosc_krajow << " krajow\n"; for( xml_node <> * kraj = kraje->first_node(); kraj; kraj = kraj->next_sibling() ) cout << " * w kraju: " << setw( 30 ) << left << kraj->first_node( "name" )->value() << " jest graczy: " << setw( 6 ) << right << kraj->first_node( "citizen-count" )->value() << '\n'; dokument.clear(); }
|
|
Monika90 |
» 2013-10-12 20:40:55 Czy winą może być nieodpowiednia wersja zlib ? |
Raczej błędy w programach z tego artykułu oraz twoja nieznajomość podstaw C++. |
|
tookie009 Temat założony przez niniejszego użytkownika |
» 2013-10-12 20:46:50 określilem funkcje main na typ int, i na końcu zwracam 0. Kompilacja udaje się, ale dostaję teraz przy starcie programu:
Unhandled exception at 0x013421e2 in xmlzstrony.exe: 0xC0000005: Access violation reading location 0x00000018.
Jakieś pomysły? @Monika90 są błędy na tej stronie ? Szczerze powiedziawszy na razie chciałem tylko zmałpować ten kod, ażeby potem patrzeć jak wszystko "leci" w "rzeczywistości" |
|
Monika90 |
» 2013-10-12 20:52:36 są błędy na tej stronie ? |
No chyba sam widzisz że są. Autor nie wiedział, że jak się definiuje funkcję to trzeba podać typ zwracany. Nie wiedział też, że auto_ptr nie może być używany z tablicami. A wystarczyło po prostu zwrócić std::string lub std::vector<char> zamiast robić jakieś new i copy. |
|
tookie009 Temat założony przez niniejszego użytkownika |
» 2013-10-12 20:57:07 dobrze wiedzieć... Zatem popróbuje pouczyć się czystego curla, a potem ew. jakąś biblioteczkę do xml sobie zmajdę. Szkoda tylko, że nie ma nic po polsku do curla, a słyszałem że oryginalna dokumentacja za "lekka" dla nowicjusza w dodatku nie jest. |
|
Monika90 |
» 2013-10-12 22:20:52 A przykładowy program się wywala, ponieważ zwrócony przez serwer dokument xml nie odpowiada jego oczekiwaniom. |
|
« 1 » |