[C++] bibliothèque math ?!

Fermé
Utilisateur anonyme - 27 janv. 2008 à 23:20
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 13 févr. 2008 à 14:11
Bonjour,

Je compile un programme depuis quelques temps, mais les erreurs sont inexplicables à mon avis.

Voilà mes fichiers :

vecteur_3D.h :

#include<iostream>
#include<math>
#include<fstream>

class vecteur_3D
{
private:
	float x,y,z;
public:
	vecteur_3D(float a, float b, float c);
	vecteur_3D();
	float operator*(vecteur_3D &V);
	vecteur_3D operator+(vecteur_3D &V);
	void operator=(vecteur_3D &V);
	friend ostream operator<<(ostream &, vecteur_3D &);
	friend istream operator>>(istream &, vecteur_3D &);
	friend void deplacement(vecteur_3D &V, float d);
};


vecteur_3D.cpp :

#include<iostream>
#include"vecteur_3D.h"
using namespace std;

vecteur_3D::vecteur_3D(float a, float b, float c)
{
	x=a;
	y=b;
	z=c;
}

vecteur_3D::vecteur_3D(){}

float vecteur_3D::operator*(vecteur_3D &V)
{
	return x*V.x+y*V.y+z*V.z;
}

vecteur_3D vecteur_3D::operator+(vecteur_3D &V)
{
	vecteur_3D temp;
	temp.x+=x+V.x;
	temp.y+=y+V.y;
	temp.z+=z+V.z;
	return temp;
}

void vecteur_3D::operator =(vecteur_3D &V)
{
	x=V.x;
	y=V.y;
	z=V.z;
}

void vecteur_3D::deplacement(vecteur_3D &V, float d)
{
	V.x+=d;
	V.y+=d;
	V.z+=d;
}

ostream &operator<<(ostream &out, vecteur_3D &v)
{
	out<<"("<<v.x<<","<<v.y<<","<<v.z<<")"<<endl;
	return out;
}

istream &operator>>(istream &out, vecteur_3D &v)
{
	cout<<"donner x, y puis z "<<endl;
	in>>v.x>>v.y>>v.z;
	return in;
}


et enfin la main.cpp :
#include<iostream>
using namespace std;

int main()
{
	vecteur_3D V1;
	vecteur_3D V2;
	vecteur_3D VRES;
	float d;
	cin>>V1;
	cin>>V2;
	VRES=V1+V2;
	d=V1*V2;
	deplacement(VRES,d)
	cout<<VRES;
	return 0;
}


Je suis sous Microsoft Visual Studio.
Apparemment, je pense qu'il s'agit d'un problème au niveau du header math. Je ne suis pas sûre du syntaxe.

Merci d'avance :)

A voir également:

8 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
28 janv. 2008 à 01:53
Bonjour,

1)indique les erreurs que tu obtiens stp !

2)Dans le standard c++ la bibliotheque des fonctions mathématiques est <cmath> il me semble.

Mais par contre, je ne vois nul part où tu utilises une quelconque fonctions issue de la bibliothèque maths !
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 janv. 2008 à 08:52
Pacorabanix a raison.
Soit tu inclu <cmath> soit <math.h>, et tu lie ensuite avec -lm (libm.a, la bibliothèque mathématique)
0
Utilisateur anonyme
2 févr. 2008 à 23:25
Salut,

Pour la bibliothèque math, je l'ai ajoutée car je voulais calculer quelques fonctions trigonométriques à l'aide des vecteurs, mais c'était dur..

Les erreurs qu'on me fasse sortir sont :

main.cpp(6) : error C2065: 'vecteur_3D' : undeclared identifier
main.cpp(6) : error C2146: syntax error : missing ';' before identifier 'V1'
main.cpp(6) : error C2065: 'V1' : undeclared identifier
main.cpp(7) : error C2146: syntax error : missing ';' before identifier 'V2'
main.cpp(7) : error C2065: 'V2' : undeclared identifier
main.cpp(8) : error C2146: syntax error : missing ';' before identifier 'VRES'
main.cpp(8) : error C2065: 'VRES' : undeclared identifier
main.cpp(15) : error C2146: syntax error : missing ';' before identifier 'cout'
main.cpp(14) : error C3861: 'deplacement': identifier not found

Merci par l'avance.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
4 févr. 2008 à 08:39
Compris.
Tu ne déclare pas vecteur_3D dans main.cpp, il ne peut pas deviner à quoi ce type se rapporte si tu ne lui dit pas.
Il te suffit d'inclure vecteur_3.h dans main.cpp, et ça devrais passer.
des conseils sur ton prog :
* n'inclu pas math.h dans vecteur_3D.h mais dans vecteur_3D.cpp. En effet, tu n'en a pas besoin dans le premier fichier, mais seulement dans le deuxième. Ce n'est pas obligatoire, mais c'est plus propre.
* inclus des "chiens de garde" dans ton .h ! ça évite les inclusions multiple qui peuvent déclanchés des erreurs de compilation :
#ifndef _VECTEUR_3D
#define _VECTEUR_3D
...// ton .h tel quell
#endif

Pour l'instant ton programme est simple, mais si un jour tu as un programme plus complexe ça te sera utile, c'est une bonne habitude à prendre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
7 févr. 2008 à 21:38
Bonsoir,

J'ai supprimé au fait le header <cmath> car je m'en servirai pas pour le moment. J'ai aussi inclu le #include"vecteur_3D.h" dans mon fichier main (je me suis pas aperçue que je l'ai omis, c'est bête de ma part ). Enfin, j'ai ajouté les "chiens de garde" comme tu me l'as conseillé, et je veillerai à ce que je les mette toujours dans mes fichiers .h, merci !

Juste me reste une petite question, on m'affiche toujours des erreurs et elles se situent toutes au niveau de cette ligne :
friend ostream &operator<<(ostream &, vecteur_3D &);


Elle est mal écrite ?

Bonne soirée :)

0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
8 févr. 2008 à 08:56
Salut.
Je ne vois pas d'où viens le problème. C'est quoi l'erreur ?
Autre remarque sur void operator=(vecteur_3D &V);.
je te conseil plutôt const vecteur_3D operator=(const vecteur_3D &V);
Le type retourné est vecteur_3D, car en C il est possible d'écrire "A=B=C;", donc pour être cohérent, retourne la valeur, ce qui te permettra de faire pareil.
pour le const devant l'argument V, c'est parceque V n'est pas sensé être modifié par cette fonction. Je crois alors que si tu lui passe un const vecteur_3D ça devrai planter, car le & rend modifiable la variable, ce qui est incompatible avec le type const.
Par exemple, en general si tu écris : A=B+C; en fait tu fais A.operator=(operator+(B,C)); , et operator+ renvoie dans le cas général un const vecteur_3D (ce qui est logique, B+C n'a pas vocation à être modifier B+C=D n'a pas vraiment de sens).
J'espère que tu comprends ce que j'ai voulu t'expliquer, je me rends compte que ce n'es pas surper clair.
0
Utilisateur anonyme
13 févr. 2008 à 13:19
Resalut,

Il y a une chose que je n'arrive pas à comprendre, la méthode operator= pour la classe vecteur_3D a t-il un type de retour qui est const, void ou bien vecteur_3D ? Ca me parait que ça devrait être vecteur_3D....

J'ai modifié la ligne
void operator=(vecteur_3D &V);
pour être :
vecteur_3D operator=(const vecteur_3D &V); 

Pas question que ce programme ne tourne pas :)

Faut-il que je renvoie mon code jusqu'à cette heure-ci ?

Mille merci.

0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 févr. 2008 à 14:11
ce que je te dit, ce ne sont que des conseils.
Pour moi, il vaut mieux de operator= retourne un const vecteur_3D car la valeur retournée n'a pas vocation à être modifier mais juste fourni éventuellement à l'affectation suivante.
D'un autre coté, ça empéche le passage par référence en même temps que l'affectation dans une fonction (ex : cos (a=3); qui ferai a=cos(3))
mais à ce moment là, je mettrais alors plutôt vecteur_3D& comme type de retour.
à toi de voir.
0