Bonjour à tous !
Je suis actuellement en train de finaliser mon tout premier projet en C++. Et tout marchait bien... jusqu'à ce que je rencontre un problème qui dépasse mes connaissances. Je pense qu'il s'agit d'un problème d'importation de librairie mais je n'en suis même pas sûr.
Explication:
J'ai fait tout mon programme grâce au framework Qt, j'ai donc codé sous Qt Creator. Ma dernière classe à construire à pour but de lire des fichiers XML (des coordonnées GPS)pour retourner les données qui m'intéressent sous un format utilisable en C++ (je cherche donc à construire un objet Trajet qui est un ensemble de vector<double>). J'ai pour cela trouvé un "parser" (version que j'ai adaptée en C++ depuis un code C# ici). Le problème c'est que ce parser utilise l'assembly .NET system.XML.
Et évidemment ça ne marche plus dans mon code. J'ai ajouté dans mon main pour inclure les librairies nécessaires:
Mais cela m'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #using <mscorlib.dll> using namespace System; #using <System.Xml.dll> using namespace System::Xml;
erreur : C1190: le code cibl‚ manag‚ requiert une option '/clr'
J'ai donc compilé en mode "MSVC2010 (Qt SDK) release" mais j'ai encore cette erreur qui s'affiche. Je ne sais vraiment pas comment le résoudre et c'est d'autant plus rageant que c'est la dernière étape de mon programme.
Pour info voici mon code simplifié :
Trajet.h
Trajet.cpp
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 #ifndef TRAJET_H #define TRAJET_H //.h Classe permettant de parser un fichier XML afin d'obtenir un ensemble de vecteurs avec les coordonnées qui nous intéressent. #include <vector> #include <iostream> //#include <cstring> using namespace std; class Trajet { public: Trajet(void); Trajet(QString); ~Trajet(void); private: vector<double> _x ; vector<double> _y ; vector<double> _z ; vector<double> _speed ; vector<double> _acc ; vector<double> _denivele ; vector<double> _meteo ; }; #endif // TRAJET_H
Merci d'avance.
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 #using <mscorlib.dll> // ca c'est pour le system.convert using namespace System; #using <System.xml.dll> // ca c'est pour le xmlTextReader namespace System::Xml; #include <iostream> using namespace std; Trajet::Trajet(QString filenameQ) // constructeur d'un parsing depuis un fichier Xml. { // Set to read the input GPX file as XML XmlTextReader^ fichierLu = nullptr; String^ filename = filenameQ.toStdString(); fichierLu = new XmlTextReader( filename ) ; // Les slashes du nom doivent etre des / et non des \ // Read each XML node while (fichierLu -> Read()) // true si il reste au moins un noeud à explorer { if (fichierLu -> Name == "trkpt" && fichierLu ->NodeType == XmlNodeType::Element) // ATTENTION : "lat" et "lon" sont des attributs de "trkpt" { // Start a new trackpoint object and add lat / lon to it (they are attributes of <trkpt>) /*trackpoint = new GpsTrackPoint(); // Your constructor goes here*/ while (fichierLu -> MoveToNextAttribute()) // true si il rest eau moins un attribut à explorer { // Read the attributes. TODO MUST CATCH EXCEPTIONS HERE!! if ( fichierLu -> Name == "lat") { _x.push_back(Convert::ToDouble(fichierLu -> Value)); } if ( fichierLu -> Name == "lon") { _y.push_back(Convert::ToDouble(fichierLu -> Value)); } } } else if (fichierLu -> Name == "ele" && fichierLu -> NodeType == XmlNodeType::Element) // ATTENTION "ele" est un noeud de meme hierarchie que "trkpt" { // Add elevation / altitude to the track point (it is a tag by itself) while (fichierLu -> NodeType != XmlNodeType::Text) { fichierLu -> Read(); _z.push_back(Convert::ToDouble(fichierLu -> Value)); //TODO MUST CATCH EXCEPTIONS HERE!! } } else if (fichierLu -> Name == "speed" && fichierLu -> NodeType == XmlNodeType::Element) // ATTENTION "speed" est un noeud de meme hierarchie que "trkpt" { // Add speed to the track point (it is a tag by itself) while (fichierLu -> NodeType != XmlNodeType::Text) { fichierLu -> Read(); _speed.push_back(Convert::ToDouble(fichierLu -> Value)); //TODO MUST CATCH EXCEPTIONS HERE!! } } } }
RollingB
Partager