Bonjour,
J'ai un petit soucis à la compilation de mon code mais je ne comprends pas trop pourquoi ...
Voici mon code .hpp :
Voici mon code .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
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 #ifndef __add__hpp__ #define __add__hpp__ #include "DynamixObject.hpp" #include "MmxObject.hpp" #include "Point.hpp" #include "Vector.hpp" #include "Line.hpp" #include "DynamixData.hpp" #include <iostream> #include <map> #include <set> namespace dynamix{ void addObject(DynamixData *data, int argc, std::string argv[]); template<class T, class U, class V> void createObject(DynamixData *data, T obj, U obj1, V obj2) throw(char *){ if(data->countMap(obj) != 0 && !dynamic_cast<T>(obj)) throw "Un autre objet a deja ce nom !"; if(data->countMap(obj) != 0) throw "Un autre objet a deja ce nom !"; if(data->countMap(obj1) == 0 && data->countMap(obj2) == 0) throw "Les objects ne sont pas dans la structure !"; if(!dynamic_cast<U>(obj1) || !dynamic_cast<V>(obj2)) throw "Des objects ne sont pas dans la structure"; std::set<std::string> setFrom; setFrom.insert(obj1->getName()); setFrom.insert(obj2->getName()); if(dynamic_cast<Point *>(obj)){ Point *t = resolveEquation(&*data, obj->getName(), *(Line *)obj1, *(Line *)obj2); DynamixObject *dynObj = new DynamixObject(t, (*(MmxObject *)obj).getName(), setFrom); data->insertMap(dynObj); data->findMap(obj1)->addTo(t); data->findMap(obj2)->addTo(t); } else{ T t = new T((*(MmxObject *)obj).getName(), obj1, obj2); DynamixObject *dynObj = new DynamixObject(t, (*(MmxObject *)obj).getName(), setFrom); data->insertMap(dynObj); data->findMap(obj1)->addTo(t); data->findMap(obj2)->addTo(t); } } template<class T> void createObject(DynamixData *data, T obj, double x, double y, double z)throw(char *){ if(data->countMap(obj) != 0 && !dynamic_cast<T>(obj)) throw "Un autre objet a deja ce nom !"; if(data->countMap(obj) != 0)throw "Un autre objet a deja ce nom !"; T t= new T((*(MmxObject *)obj).getName(), x, y, z); std::set<std::string> setFrom; DynamixObject *dynObj = new DynamixObject(t, (*(MmxObject *)obj).getName(), setFrom); data->insertMap(dynObj); } template<class T> void createObject(DynamixData *data, T obj, double x, double x_t, double y, double y_t, double z, double z_t)throw(char *){ if(data->countMap(obj) != 0 && !dynamic_cast<T>(obj)) throw "Un autre objet a deja ce nom !"; if(data->countMap(obj) != 0)throw "Un autre objet a deja ce nom !"; T t= new T((*(MmxObject *)obj).getName(), x, x_t, y, y_t, z, z_t); std::set<std::string> setFrom; DynamixObject *dynObj = new DynamixObject(t, (*(MmxObject *)obj).getName(), setFrom); data->insertMap(dynObj); } Point* resolveEquation(DynamixData *data, std::string name, std::string strl1, std::string strl2); Point* resolveEquation(DynamixData *data, std::string name, Line l1, Line l2); }// namespace dynamix; #endif
et Voici les insultes envoyé par mon compilo :
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 #include "add.hpp" #include <stdlib.h> using namespace std; namespace dynamix{ void addObject(dynamix::DynamixData *data, int argc, char* argv[]){ if(argc == 3){ createObject(data, data->findMap(argv[0])->getObj(), data->findMap(argv[1])->getObj(), data->findMap(argv[2])->getObj()); } else if(argc == 4){ createObject(data, data->findMap(argv[0])->getObj(), strtod(argv[1],NULL), strtod(argv[2],NULL), strtod(argv[3],NULL)); } else if(argc == 7){ createObject(data, data->findMap(argv[0])->getObj(), strtod(argv[1],NULL), strtod(argv[2],NULL), strtod(argv[3],NULL), strtod(argv[4],NULL), strtod(argv[5],NULL), strtod(argv[6],NULL)); } } Point* resolveEquation(DynamixData *data, string name, string strl1, string strl2){ Line l1 = *dynamic_cast<Line *>(data->findMap(strl1)->getObj()); Line l2 = *dynamic_cast<Line *>(data->findMap(strl2)->getObj()); return resolveEquation(data, name, l1, l2); } Point* resolveEquation(DynamixData *data, string name, Line l1, Line l2){ double t11 = (l2.getOrigin().getX() - l1.getOrigin().getX()) / (l1.getExtremity().getX() - l1.getOrigin().getX()); double t12 = (l2.getExtremity().getX() - l2.getOrigin().getX()) / (l1.getExtremity().getX() - l1.getOrigin().getX()); double t21 = (l1.getOrigin().getY() - l2.getOrigin().getY() + t11 * (l1.getExtremity().getY() - l1.getOrigin().getY())); double t22 = (l2.getExtremity().getY() - l2.getOrigin().getY() + t12 * (l1.getExtremity().getY() - l1.getOrigin().getY())); double t2 = t21 / t22; double t1 = t11 + t2 * t12; double z1 = l1.getOrigin().getZ() + t1 * (l1.getExtremity().getZ() - l1.getOrigin().getZ()); double z2 = l2.getOrigin().getZ() + t2 * (l2.getExtremity().getZ() - l2.getOrigin().getZ()); if(z1 != z2) throw "Les Droites n'ont pas de point d'intersection, impossible de créer le point !"; double x = l1.getOrigin().getX() + t1 * (l1.getExtremity().getX() - l1.getOrigin().getX()); double y = l1.getOrigin().getY() + t1 * (l1.getExtremity().getY() - l1.getOrigin().getY()); double z = z1; return new Point(name,x,y,z); } }// namespace dynamix;
Merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 g++ -c add.cpp add.hpp: In function «void dynamix::createObject(dynamix::DynamixData*, T, U, V) [with T = dynamix::MmxObject*, U = dynamix::MmxObject*, V = dynamix::MmxObject*]»: add.cpp:9: instantiated from here add.hpp:37: erreur: new initializer liste d'expressions traitée comme une expression composée add.hpp:37: erreur: cannot convert «dynamix::MmxObject**» to «dynamix::MmxObject*» in initialization add.hpp: In function «void dynamix::createObject(dynamix::DynamixData*, T, double, double, double) [with T = dynamix::MmxObject*]»: add.cpp:12: instantiated from here add.hpp:50: erreur: new initializer liste d'expressions traitée comme une expression composée add.hpp:50: erreur: cannot convert «double» to «dynamix::MmxObject*» in initialization add.hpp: In function «void dynamix::createObject(dynamix::DynamixData*, T, double, double, double, double, double, double) [with T = dynamix::MmxObject*]»: add.cpp:15: instantiated from here add.hpp:60: erreur: new initializer liste d'expressions traitée comme une expression composée add.hpp:60: erreur: cannot convert «double» to «dynamix::MmxObject*» in initialization make: *** [add.o] Erreur 1
Julie.
Partager