[resolut] Probleme de compilation avec QtXml

Probleme de compilation avec QtXml [resolut] - C++ - Programmation

Marsh Posté le 03-07-2007 à 14:26:50    

Bonjour,
 
J'ai un probleme de compilation, le but de ce programme est de testé la lecture XML avec la bibliotheque QtXml
 
Voila pour faire simple quant je compile ca donne :
 

Code :
  1. compiling Xml.cpp (g++)
  2. generating moc_Xml.cpp (moc)
  3. src/Xml.h:0: Warning: No relevant classes found. No output generated.
  4. compiling moc_Xml.cpp (g++)
  5. linking xmlTest2 (g++)
  6. Xml.o: In function `Xml::Xml()':
  7. Xml.cpp:(.text+0x5e): undefined reference to `QDomDocument::QDomDocument(QString const& )'
  8. Xml.cpp:(.text+0xee): undefined reference to `QDomDocument::setContent(QIODevice*, QString*, int*, int*)'
  9. Xml.cpp:(.text+0x106): undefined reference to `QDomDocument::~QDomDocument()'
  10. Xml.cpp:(.text+0x152): undefined reference to `QDomDocument::~QDomDocument()'
  11. Xml.o: In function `Xml::Xml()':
  12. Xml.cpp:(.text+0x1ae): undefined reference to `QDomDocument::QDomDocument(QString const& )'
  13. Xml.cpp:(.text+0x23e): undefined reference to `QDomDocument::setContent(QIODevice*, QString*, int*, int*)'
  14. Xml.cpp:(.text+0x256): undefined reference to `QDomDocument::~QDomDocument()'
  15. Xml.cpp:(.text+0x2a2): undefined reference to `QDomDocument::~QDomDocument()'
  16. collect2: ld a retourné 1 code d'état d'exécution
  17. make: *** [xmlTest2] Erreur 1
  18. make: La cible « first » n'a pas pu être refabriquée à cause d'erreurs.
  19. *** Exited with status: 2 ***


 
le main :
 

Code :
  1. #include <QCoreApplication>
  2. #include "Xml.h"
  3. int main(int argc, char *argv[])
  4. {
  5.       QCoreApplication app(argc, argv);
  6. Xml a;
  7. a.Lire();
  8.       qDebug("Hello from Qt 4!" );
  9.       return 0;
  10. }


 
 
le xml.h

Code :
  1. #ifndef XML_H
  2. #define XML_H
  3. #include <QObject>
  4. #include <QMessageBox>
  5. //#include <QtXml/QtXml>
  6. #include <QtXml/QDomDocument>
  7. #include <QFile>
  8. class Xml :public QObject
  9. {
  10. Q_OBJECT
  11. public:
  12.  Xml();
  13.  ~Xml();
  14. public:
  15.  void Lire();
  16. private:
  17.  QDomDocument *doc;
  18. };
  19. #endif


 
 
le Xml.cpp
 

Code :
  1. #include "Xml.h"
  2. //#include <QtXml/QtXml>
  3. #include <QtXml/QDomDocument>
  4. Xml::Xml()
  5. {
  6.  QDomDocument doc("mydocument" );
  7. QFile file("config.xml" );
  8. if(!file.open(QIODevice::ReadOnly))
  9.  return;
  10. if(!doc.setContent(&file)){ // etablit le doc XML a partir des données du fichier
  11.  file.close();
  12.  return;
  13. }
  14. file.close();
  15. }
  16. Xml::~Xml()
  17. {
  18. }
  19. void Xml::Lire()
  20. {/*
  21. int i=0;
  22. QString affichage;
  23. QDomNodeList tab;
  24. QDomElement mesure;
  25. QDomNode n;
  26. QMessageBox a(0);
  27. QDomElement racine = doc.documentElement(); //renvoie la balise racine
  28. QDomNode noeud = racine.firstChild();  //renvoie la 1er balise
  29.  
  30. while(!noeud.isNull())
  31. {
  32.  //convertit le noeud en element pour utiliser les methodes tagName et attribute
  33.  mesure = noeud.toElement();
  34.  //verification du nom de la balise
  35.  if(mesure.tagName()=="systeme" )
  36.  {
  37.   affichage = mesure.attribute("id" );
  38.   if (affichage != "outil_postage" )
  39.   {
  40.    a.setText("probleme lecture fichier config !!" );
  41.    a.exec();
  42.    return ;
  43.   }
  44.   tab = mesure.childNodes();
  45.   for (i=0;i<tab.length();i++)
  46.   {
  47.    affichage = affichage + " "+n.firstChild().toText().data();
  48.   }
  49.   a.setText(affichage);
  50.   a.exec();
  51.  }
  52.  noeud = noeud.nextSibling();
  53. }
  54. */
  55. }


 
voila, j'ai retrouné le probléme dans tous les senses et je vois pas le probléme.
Si quelqu'un a une petite solution a me proposé ca serai cool,
 
Merci d'avance.


Message édité par nebucade le 17-07-2007 à 10:30:42
Reply

Marsh Posté le 03-07-2007 à 14:26:50   

Reply

Marsh Posté le 03-07-2007 à 14:50:15    

Salut,
 
As-tu ajouté la ligne QT += xml à ton fichier pro? C'est en général la cause principale de ce type d'erreur...

Reply

Marsh Posté le 03-07-2007 à 15:11:54    

Ok c'est cool ca compile,
 
J'ai plus qu'a faire mes teste.
 
 
merci bien

Reply

Marsh Posté le 03-07-2007 à 15:51:42    

bon voila,
 
Je doit pas etre en forme today,
 
je crée un fichier xml
 

Code :
  1. <?xml version="1.0" ?>
  2. <configuration>
  3. <systeme id = "outil_postage" >
  4.  <serveur>
  5.   <mediacontact > mcsp-fr </mediacontact>
  6.   <basedonnee > winbdd1-fr:1433 </basedonnee>
  7.  </serveur>
  8.  <repertoire>
  9.   <lien> mcsp-fr/mfr/fr/centre/ </lien>
  10.   <out> out </out>
  11.  </repertoire>
  12.  <connection>
  13.   <loginMc> postage_MC </loginMc>
  14.   <loginPostage> postage_Mc </loginMc>
  15.   <passMc> postage_MC </passMc>
  16.   <passPostage> postage_MC </passMc>
  17.   <baseNameMc> MediaContact </baseMc>
  18.   <baseNamePostage> outilPostage </basePostage>
  19.   <driverBaseMc> QODBC </driverBaseMc>
  20.   <driverBasePostage> QODBC </driverBasePostag >
  21.  </connection>
  22. </systeme>
  23. </configuration >


 
 
bien sur j'ai supprimé le /* de la methode LIre avec quelque modif :
 

Code :
  1. QString Xml::Lire()
  2. {
  3. int i=0;
  4. QString affichage="vide";
  5. QDomNodeList tab;
  6. QDomElement mesure;
  7. QDomNode n;
  8. QDomElement racine = doc.documentElement(); //renvoie la balise racine
  9. QDomNode noeud = racine.firstChild();  //renvoie la 1er balise
  10. while(!noeud.isNull())
  11. {qDebug("###" );
  12.  //convertit le noeud en element pour utiliser les methodes tagName et attribute
  13.  mesure = noeud.toElement();
  14.  //verification du nom de la balise
  15.  qDebug(qPrintable(mesure.tagName()));
  16.  qDebug("###" );
  17.  if(mesure.tagName()=="configuration" )
  18.  {qDebug("ps" );
  19.   affichage = mesure.attribute("id" );
  20.   if (affichage != "outil_postage" )
  21.   {
  22.    affichage = "probleme lecture fichier config !!";
  23.    return affichage;
  24.   }
  25.   qDebug("ccc" );
  26.   tab = mesure.childNodes();
  27.   for (i=0;i<tab.length();i++)
  28.   {
  29.    qDebug("ddd" );
  30.    affichage = affichage + " "+n.firstChild().toText().data();
  31.   }
  32.   qDebug("oups" );
  33.  }
  34.  noeud = noeud.nextSibling();
  35. }
  36. return affichage;
  37. }


 
 
et le main devrai m'afficher des choses, mais en faite non car le noeud est vide !!!
 
Une petite idée pour moi auriez-vous ?
 
merci

Reply

Marsh Posté le 03-07-2007 à 16:28:24    

Le noeud est vide ou il est null? (ce n'est pas la même signification)
 
Je te conseille de debugger et de voir ce qui cloche, car au vu du code de ton constructeur, tu demandes de lire un document potentiellement vide (vu que tu ne fais qu'un return en cas d'échec de lecture de config.xml).

Reply

Marsh Posté le 03-07-2007 à 17:18:24    

oui j'ai vu ca,
 
En faite j'ai un probleme dans le constructeur.
 
le doc.setContent(&file) verifie le format du fichier xml, qui d'apres mon debug retourne un probleme.
 
La il me reste plus qu'a recuperé l'erreur avec la ligne et la colonne.
 
merci de ta reponse

Reply

Marsh Posté le 03-07-2007 à 17:29:52    

Bon ba voila,
 
apres avoir recup mes erreur, c'était tous simplement le fichier XML qui n'était pas bon.
 
Et oui vive les copier collé, mais apres faut pas oublié de changer correctement le nom de toute les balises

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed