2010-04-04 6 views
1

Je suis novice à rapidXML mais d'abord impresion n'a pas été positif, je me suis simplement Visual Studio 6 C++ Bonjour application du monde et les fichiers ajoutés RapidXML HPP au projet et main.cpp je mets:erreurs de compilation avec RapidXML

#include "stdafx.h" 

#include <iostream> 
#include <string> 
#include "rapidxml.hpp" 

using namespace std; 
using namespace rapidxml; 

int main () 
{ 
    char x[] = "<Something>Text</Something>\0" ; //<<<< funktioniert, aber mit '*' nicht 
    xml_document<> doc ; 
    doc.parse<0>(x) ; 
    cout << "Name of my first node is: " << doc.first_node()->name() << endl ; 
    xml_node<>* node = doc.first_node("Something") ; 
    cout << "Node 'Something' has value: " << node->value() << endl ; 
} 

Et il ne compile pas, aucune aide? Est-ce que RapidXML est possible avec Visual Studio 6? erreur que je reçois sont:

--------------------Configuration: aaa - Win32 Debug-------------------- 
Compiling... 
rapidxml.cpp 
c:\Parser\rapidxml.cpp(310) : error C2039: 'size_t' : is not a member of 'std' 
c:\Parser\rapidxml.cpp(320) : error C2039: 'size_t' : is not a member of 'std' 
c:\Parser\rapidxml.cpp(320) : error C2039: 'size_t' : is not a member of 'std' 
c:\Parser\rapidxml.cpp(385) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(417) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(417) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(448) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(448) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(476) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(579) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(599) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(639) : see reference to class template instantiation 'rapidxml::memory_pool<Ch>' being compiled 
c:\Parser\rapidxml.cpp(681) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(700) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(721) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(751) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(786) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(787) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(790) : see reference to class template instantiation 'rapidxml::xml_base<Ch>' being compiled 
c:\Parser\rapidxml.cpp(836) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(876) : see reference to class template instantiation 'rapidxml::xml_attribute<Ch>' being compiled 
c:\Parser\rapidxml.cpp(856) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(876) : see reference to class template instantiation 'rapidxml::xml_attribute<Ch>' being compiled 
c:\Parser\rapidxml.cpp(936) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
c:\Parser\rapidxml.cpp(958) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
c:\Parser\rapidxml.cpp(981) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
c:\Parser\rapidxml.cpp(1004) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
c:\Parser\rapidxml.cpp(1025) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
c:\Parser\rapidxml.cpp(1045) : error C2039: 'size_t' : is not a member of 'std' 
     c:\Parser\rapidxml.cpp(1345) : see reference to class template instantiation 'rapidxml::xml_node<Ch>' being compiled 
Error executing cl.exe. 

rapidxml.obj - 25 error(s), 0 warning(s) 
+0

Actuellement, la bibliothèque Boost utilise rapidxml en tant qu'analyseur XML. Si vous aimez, vous pouvez jeter un oeil sur le code Boost. –

Répondre

2

Visual C++ 6 dates d'avant le langage C++ a été normalisée. Si vous rencontrez des problèmes en compilant même du code vaguement moderne, il y a de fortes chances que le problème réside dans le compilateur et non dans le code. Ces problèmes ne peuvent généralement pas être résolus - vous devez probablement passer à un compilateur plus moderne.

+0

Depuis que je suis novice dans ce domaine du parsig, j'excuse que c'est mon bug ... laisse voir ce que les autres pensent. – milan

+0

@milan L'erreur est que VC++ 6.0 ne peut apparemment pas compiler RapidXM, rien à voir avec votre propre codeL. Vu que le projet RapidXML a commencé 8 ans après la sortie de VC++ 6, ce n'est pas surprenant. Peu importe ce que "les autres" pensent. –

+0

Obtenir le nouveau Visual Studio vient avec le coût ... donc je préfère attendre d'autres avis :) – milan

0

Ce n'est pas techniquement légal, mais pourriez-vous essayez d'insérer le code suivant au-dessus de votre ligne #include "rapidxml.hpp":

namespace std 
{ 
    typedef unsigned long size_t; 
} 

Cela (illégalement) injecter size_t dans l'espace de noms std avant RapidXML essaie de l'utiliser. Si cela compile réellement, alors vous pouvez rechercher à travers les fichiers d'en-tête VC6 pour savoir quelle est la vraie définition de size_t et remplacer unsigned long ci-dessus.

+0

Je ne suis pas autorisé à envoyer la liste complète des erreurs, mais je l'ai eu (je mets ce que vous avez dit en premier et dans le fichier rapidxml.hpp): rapidxml.cpp rapidxml_iterators.cpp c: \ _ milan \ tools \ aaa \ rapidxml_iterators.cpp (24): erreur C2039: 'ptrdiff_t': n'est pas membre de 'std' c: \ _ milan \ tools \ aaa \ rapidxml_iterators.cpp (91): voir la référence à l'instanciation du modèle de classe 'rapidxml :: node_iterator 'étant compilé – milan

+0

Je pense que 'ptrdiff_t' est probablement le même que' size_t'. Ajoutez un autre typedef à votre espace de noms et réessayez. –

3

Je viens de remarquer que vos erreurs se rapportent à rapidxml.cpp. D'où vient ce fichier ??

RapidXML est une bibliothèque en-tête uniquement. Il n'y a pas rapidxml.cpp, et rapidxml.hpp ne peut pas être compilé de son propre chef - il vous suffit de l'inclure dans vos propres fichiers (comme dans main.cpp ci-dessus) pour l'utiliser.

Je ne connais rien à VC++, mais essayez de supprimer "rapidxml" du projet VC et de le reconstruire.

+0

j'ai renommé rapidxml.hpp dans cpp est-ce faux? À la fin, il devrait être complétée avec le même compilateur, non? J'ai retiré de la main.cpp "using namespace rapidxml;" comme vous l'avez dit mais avec des erreurs: Suppression des fichiers intermédiaires et des fichiers de sortie pour le projet 'RapidXMLParser - Win32 Debug'. -------------------- Configuration: RapidXMLParser - Win32 Debug -------------------- Compilation. .. main.cpp c: \ _ milan \ tools \ rapidxmlparser \ rapidxml.hpp (312): erreur C2039: 'size_t': n'est pas membre de 'std' c: \ _milan \ tools \ rapidxmlparser \ rapidxml.hpp (322): erreur C2039: 'size_t': n'est pas un membre de 'std' – milan

+2

@milan: "j'ai renommé rapidxml.hpp dans cpp est-ce faux?" Oui. 100% faux. * C'EST juste un fichier d'en-tête. C'EST TOUT CE QUE VOUS AVEZ BESOIN *. En "supprimant rapidxml" je veux dire * supprimer le fichier rapidxml.cpp du projet VS, pas supprimer la ligne 'using namespace rapidxml'. – Roddy

+0

La compilation fonctionne maintenant mais fonctionne à partir du fichier principal: doc.first_node() -> name() donne une exception (violation d'accès). Lorsque je débogue-dans exception se produit dans la fonction: Ch * nom() const { return m_name? m_name: nullstr(); } où m_name variable dans des émissions de debuger suivante Valeur: m_name \t CXX0030: Erreur: expression ne peut pas être évalué Tout indice qui ne va pas dans ce cas simple? br, milan. – milan

Questions connexes