IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XML Discussion :

utiliser TinyXml avec Visual Studio 2003


Sujet :

XML

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut utiliser TinyXml avec Visual Studio 2003
    Salut,
    J'ai l'habitude de coder en C++ exclusivement sous Code::Blocks.
    Pour des raisons professionnelles je dois passer (espérons le, seulement le temp du projet) à Visual Studio 2003.

    Pour mon projet, j'utilise la bibliotèque TinyXml. J'ai d'abord effectué tout le code sous Code::Blocks et tout marche parfaitement. Le drame survient quand je veux passer à VS. Ca pète de partout !

    J'ai pourtant bien recompilé TinyXml avec STL sous VS (j'ai pas eu de problème, je me suis servi du projet vs fournit par la lib). J'ai inclu les headers dans mon projet. J'ai indiqué les chemins (je crois) au compilo. Et pourtant j'ai plusieurs erreurs "bizarres" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2079: 'iss' uses undefined class 'std::basic_istringstream<_Elem,_Traits,_Alloc>'
    Voici l'endroit où ça plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <iostream>
    #include <string>
    #include "../tinyxml.h"
    
    ...
    
    void dump_to_stdout(std::string pStr)
    {
      TiXmlDocument *doc;
      std::istringstream iss(pStr);
    
      // initialisation
      doc = new TiXmlDocument();
      std::cout << iss.str() << std::endl;
      iss >> (*doc);
    
      // parsing
      dump_to_stdout(doc);
    
      // liberation de la memoire
      delete doc;
      doc = 0;
    }
    J'y ai passé toute l'après-midi et là je craque.
    Merci à ceux qui prendront la peine de m'aider.
    ++
    --
    "Qui fait le malin tombe dans le ravin"

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    De mémoire istringstream est défini dans le fichier d'entête standard <sstream>.
    Il se peut qu'il y ait une déclaration par avance de ce type dans <iostream> ce qui expliquerait le message d'erreur.
    Si tu as correctement inclus <sstream>, alors je n'ai pas de réponse.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Jan Rendek
    De mémoire istringstream est défini dans le fichier d'entête standard <sstream>.
    Wouhou ! Apparament c'était ça.
    Par contre maintenant j'ai une nouvelle erreur de linkage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'TiXmlDocument' (or there is no acceptable conversion)
    Je pense qu'il va mal chercher mon ".lib". Je vais voir de ce côté là.

    En tout cas merci.
    --
    "Qui fait le malin tombe dans le ravin"

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Ca à plutot l'air d'une erreur de compilation, plutôt que d'édition de lien

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Ca m'étonnerais quand même. J'ai repris exactement le même fichier que celui qui compilait avec C::B.
    --
    "Qui fait le malin tombe dans le ravin"

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Ok j'ai trouvé : quand j'ai recompilé TinyXml sous VS, j'avais pas défini la variable TINY_XML_STL pensant que c'était déjà fait. Voila ca semble à présent marcher. Merci pour tout Jan Rendek.

    Pour résumer, voilà finalement mon code (parcours et affichage indenté d'un fichier XML) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    #include <iostream>
    #include <string>
    #include <sstream> 
    #include "tinyxml.h"
     
    const unsigned int NUM_INDENTS_PER_SPACE = 2;
     
    /**
     *
     * @brief Display SPACES before elements.
     *
     * @param numIndents
     *
     */
    const char *getIndent(unsigned int numIndents)
    {
    	static const char *pINDENT = "                                      + ";
    	static const unsigned int LENGTH = strlen(pINDENT);
    	unsigned int n = numIndents * NUM_INDENTS_PER_SPACE;
     
    	if (n > LENGTH)
        n = LENGTH;
    	return &pINDENT[LENGTH - n];
    }
     
    /**
     *
     * @brief Same as getIndent but no "+" at the end.
     *
     * @param numIndents
     *
     */
    const char * getIndentAlt( unsigned int numIndents )
    {
    	static const char *pINDENT = "                                        ";
    	static const unsigned int LENGTH = strlen(pINDENT);
    	unsigned int n = numIndents * NUM_INDENTS_PER_SPACE;
     
    	if (n > LENGTH)
        n = LENGTH;
    	return &pINDENT[LENGTH - n];
    }
     
    /**
     *
     * @brief Display the attributs of an element on STDOUT.
     *
     * @param pElement
     * @param indent
     *
     * @return
     *
     */
    int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)
    {
    	int cpt = 0;
    	int ival = 0;
    	double dval;
    	TiXmlAttribute *pAttrib;
    	const char *pIndent;
     
    	if (!pElement)
        return 0;
     
      pAttrib = pElement->FirstAttribute();
      pIndent = getIndent(indent);
     
    	printf("\n");
    	while (pAttrib)
    	{
    		printf("%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value());
    		if (pAttrib->QueryIntValue(&ival) == TIXML_SUCCESS)
          printf(" int=%d", ival);
    		if (pAttrib->QueryDoubleValue(&dval) == TIXML_SUCCESS)
          printf(" d=%1.1f", dval);
    		printf("\n");
    		++cpt;
    		pAttrib = pAttrib->Next();
    	}
    	return cpt;
    }
     
    /**
     * @brief Load the named file and dump its structure to STDOUT.
     *
     * @param pParent
     * @param indent
     *
     */
    void dump_to_stdout(TiXmlNode* pParent, unsigned int indent = 0)
    {
    	int num = 0;
    	TiXmlNode *pChild;
    	TiXmlText *pText;
     
    	if (!pParent)
        return;
     
    	printf( "%s", getIndent(indent));
    	switch (pParent->Type())
    	{
    	case TiXmlNode::DOCUMENT:
    		printf( "Document" );
    		break;
     
    	case TiXmlNode::ELEMENT:
    		printf( "Element [%s]", pParent->Value() );
    		num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);
    		switch(num)
    		{
    			case 0:  printf( " (No attributes)"); break;
    			case 1:  printf( "%s1 attribute", getIndentAlt(indent)); break;
    			default: printf( "%s%d attributes", getIndentAlt(indent), num); break;
    		}
    		break;
     
    	case TiXmlNode::COMMENT:
    		printf( "Comment: [%s]", pParent->Value());
    		break;
     
    	case TiXmlNode::UNKNOWN:
    		printf( "Unknown" );
    		break;
     
    	case TiXmlNode::TEXT:
    		pText = pParent->ToText();
    		printf( "Text: [%s]", pText->Value() );
    		break;
     
    	case TiXmlNode::DECLARATION:
    		printf( "Declaration" );
    		break;
    	default:
    		break;
    	}
    	printf( "\n" );
    	for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
    	{
    		dump_to_stdout( pChild, indent+1 );
    	}
    }
     
    /**
     * @brief Load the named file and dump its structure to STDOUT.
     *
     * @param pStr
     *
     */
    void dump_to_stdout(std::string pStr)
    {
      TiXmlDocument *doc;
      std::istringstream iss(pStr);
     
      // initialisation
      doc = new TiXmlDocument();
      std::cout << iss.str() << std::endl;
      iss >> (*doc);
     
      // parsing
      dump_to_stdout(doc);
     
      // liberation de la memoire
      delete doc;
      doc = 0;
    }
     
    /**
     * @brief Main Function
     *
     * @param argc
     * @param argv
     *
     * @return
     *
     */
    int main(int argc, char *argv[])
    {
      dump_to_stdout("<invoke name=\"ExternalInterfaceSample.MainForm.DisplayMessage\" returntype=\"xml\"><arguments><string>Hello world</string><number type=\"unsigned\">92</number></arguments></invoke>");
    	return 0;
    }
    ++
    --
    "Qui fait le malin tombe dans le ravin"

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    - Pourquoi t'as créé un nouveau sujet ?
    - Pourquoi tu n'as pas pris en compte mon précédent message ?
    Boost ftw

  8. #8
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Parcequ'au départ ce dernier post était dédié à la migration de code::blocks vers visual studio après j'ai eu des erreurs et voila...
    --
    "Qui fait le malin tombe dans le ravin"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Aide SVP comment utiliser Alfresco avec Visual Studio 2003
    Par ach87 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 23/01/2013, 18h24
  2. Configuration d'OpenCV avec Visual Studio 2003
    Par engineer_23 dans le forum OpenCV
    Réponses: 1
    Dernier message: 28/07/2007, 08h33
  3. utilisation DLL avec visual studio .net
    Par G-OnZa dans le forum Visual C++
    Réponses: 2
    Dernier message: 27/04/2007, 15h56
  4. fatal link error avec visual studio 2003
    Par zephe dans le forum MFC
    Réponses: 5
    Dernier message: 26/07/2006, 18h49
  5. [MFC] MFC avec visual studio 2003
    Par leoninho dans le forum MFC
    Réponses: 9
    Dernier message: 11/03/2006, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo