Bonjour,

J'ai un petit soucis à la compilation de mon code mais je ne comprends pas trop pourquoi ...

Voici mon code .hpp :

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
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
#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;
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
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
Merci d'avance pour votre aide.

Julie.