C++ débutant

Un problème informatique? Une question? Bref tout ce qui a un rapport avec l'informatique, les virus, les questions d'utilisation de logiciels...

Modérateurs : Naveed, GregLand

Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

C++ débutant

Message par Sebome »

Bonjour à tous.
Je suis débutant en C++ j'essai de faire un petit programme qui a aucun intérêt à par me permettre de voir si j’ai bien compris mais il y a deux erreur que je ne comprend pas.

Code : Tout sélectionner

#include <iostream.h>
#include <math.h>

class POINT
{
private:
	float X,Y,Z;

public:
	POINT();
	POINT(float A,float B);
	POINT(float A,float B, float C);
	T();
	T(float Z);
	T(float P1, float P2);
	T(float P1, float P2, float P3);
	float operator=(POINT P);
	void Voir();
};


POINT::POINT()
{
	X=0;
	Y=0;
	Z=0;
};

POINT::POINT(float A, float B)
{
	X=A;
	Y=B;
	Z=5;
};


POINT::POINT(float A,float B, float C)
{
	X=A;
	Y=B;
	Z=C;
};

POINT::T()
{
	X-=5;
	Y-=4;
	Z-=3;
};

POINT::T(float P1)
{
	Z=P1;
};

POINT::T(float P1, float P2)
{
	X=P1;
	Y=P2;
};

POINT::T(float P1, float P2, float P3)
{
	X=P1;
	Y=P2;
	Z=P3;
};

float POINT::operator=(POINT V1)
{
	float R;
	R=(X*X)+(Y*Y)+(Z*Z);
	R=sqrt(R);
	return R;
};

void POINT::Voir()
{
	cout<<"\nLe point est defini par X="<<X<<", Y="<<Y<<", Z="<<Z<<"\n\n\n\n\n";
};


void main()
{
	float d;
	POINT P1();
	cout<<"\n---Affichage du point P1---\n";
	P1.Voir();//erreur ici le compilateur me met : "left of'.Voir' must have class/struct/union" 
	POINT P2(2,3);
	cout<<"\n---Affichage du point P2---\n";
	P2.Voir();
	POINT P3(1,3,5);
	cout<<"\n---Affichage du point P3---\n";
	P3.Voir();
	P3.T();
	cout<<"\n---Affichage de P3 apres apllication de la fonction T()---\n";
	P3.Voir();
	P3.T(3,4);
	cout<<"\n---Affichage de P3 apres apllication de la fonction T(3,4)---\n";
	P3.Voir();
	P3.T(4,5,8);
	cout<<"\n---Affichage de P3 apres application de la fonction T(4,5,8)---\n";
	P3.Voir();
	cout<<"\n---Distance par rapport au centre du point P3---\n";
	d= P3;//erreur ici le compilateur me met : "binary'=' : no operator defined which takes a right-han operand of type 'class POINT' (or there is not acceptable conversion)
	cout<<"\nd="<<d<<endl;
}


La première erreur je ne comprend pas tout .

La seconde j'ai essayer de faire une surcharge d'opérateur pour voir comment ça fonctionne mais là j'ai pas du avoir tout compris (oui je sais j'aurais pu faire ça avec une fonction).

Est-ce que quelqu’un peut éclairer ma lanterne svp?

Merci
real34
Messages : 1030
Enregistré le : 01 janv. 2004 18:51
Langage de programmation connu : PHP, SQL, CSS, xHTML, Javascript, Java, JSF, ASP.NET (C#), Pascal, Openlaszlo, XML
Localisation : Toulouse
Contact :

Message par real34 »

Pour ta première erreur, essaie de remplacer : POINT P1(); par POINT P1; (sinon, le compilateur croit à une spécification de Fonction !)

Pour la seconde erreur, je pense que le problème vient du fait que lorsque tu écris : d= P3; tu veux assigner un objet d'un type de classe dans un Float, donc c'est insompatible !

Voici une page qui peut t'aider : http://www.cs.virginia.edu/~cs216/Fall2 ... 1Hints.htm

@+

PS: Je ne connais ni le C++ ni les classes en C (si ca existe) donc je pense que je ne pourrais pas t'aider plus ! :roll:
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Merci real34
Oui pour la premiere erreur j'ai étais trop con là!!!!

Mais par contre pour la deuxième erreur vu que j’ai fais une surcharge d’opérateur (je ne sais pas si ça existe en C) et que j’ai redéfini l’opérateur = . Je suis sur que c'est possible ce que je veux faire mais dans mon main ça doit pas s'écrire d=P3.
real34
Messages : 1030
Enregistré le : 01 janv. 2004 18:51
Langage de programmation connu : PHP, SQL, CSS, xHTML, Javascript, Java, JSF, ASP.NET (C#), Pascal, Openlaszlo, XML
Localisation : Toulouse
Contact :

Message par real34 »

En effet, je ne pense pas que cela fonctionne comme ça (j'avais pas vu ta surcharge d'opérateurs).

Je ne sais pas si ca existe en C, j'en suis à peine aux pointeurs, par contre on a vu ça en ADA (vive les langages stricts qu'on fait en cours!).

Par contre, d'après ce que j'ai lu ici, il m'a semblé comprendre que peut-être tu pouvais faire un truc genre :
d = =P3; .... mais ca fait bizarre ! :D

Désolé, je peux pas t'aider plus !
Image
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

salut

j'ai cherché mais j'ai pas compris ton erreur, la 2ème
je te laisse qd meme le code avec la 1ère corrigé et j'ai rajouté
" using namespace std;"
disons que c qui est utilisé maintenant, vo mieux mettre ça, ça change le début de la synthaxe des librairie c tt.
j'ia rajouté conio et getch

Code : Tout sélectionner


#include <iostream> /////////////////
#include <math.h>
#include <conio.h> // pour getch();

using namespace std; ////////////////

class POINT
{
private:
   float X,Y,Z;

public:
POINT();
   POINT(float A,float B);
   POINT(float A,float B, float C);
   T();
   T(float Z);
   T(float P1, float P2);
   T(float P1, float P2, float P3);
   float operator=(POINT P);
   void Voir(); 
};

POINT::POINT()
{
   X=0;
   Y=0;
   Z=0;
};

POINT::POINT(float A, float B)
{
   X=A;
   Y=B;
   Z=5;
};


POINT::POINT(float A,float B, float C)
{
   X=A;
   Y=B;
   Z=C;
};

POINT::T()
{
   X-=5;
   Y-=4;
   Z-=3;
};

POINT::T(float P1)
{
   Z=P1;
};

POINT::T(float P1, float P2)
{
   X=P1;
   Y=P2;
};

POINT::T(float P1, float P2, float P3)
{
   X=P1;
   Y=P2;
   Z=P3;
};

float POINT::operator=(POINT V1)
{
   float R;
   R=(X*X)+(Y*Y)+(Z*Z);
   R=sqrt(R);
   return R;
};

void POINT::Voir()
{
   cout<<"\nLe point est defini par X="<<X<<", Y="<<Y<<", Z="<<Z<<"\n\n\n\n\n";
};

int main()
{
  float d;
   POINT P1;
   cout<<"\n---Affichage du point P1---\n";
   P1.Voir();//erreur ici le compilateur me met : "left of'.Voir' must have class/struct/union"
   POINT P2(2,3);
   cout<<"\n---Affichage du point P2---\n";
   P2.Voir();
   POINT P3(1,3,5);
   cout<<"\n---Affichage du point P3---\n";
   P3.Voir();
   P3.T();
   cout<<"\n---Affichage de P3 apres apllication de la fonction T()---\n";
   P3.Voir();
   P3.T(3,4);
   cout<<"\n---Affichage de P3 apres apllication de la fonction T(3,4)---\n";
   P3.Voir();
   P3.T(4,5,8);
   cout<<"\n---Affichage de P3 apres application de la fonction T(4,5,8)---\n";
   P3.Voir();
   cout<<"\n---Distance par rapport au centre du point P3---\n";
   d=P3;//erreur ici le compilateur me met : "binary'=' : no operator defined which takes a right-han operand of type 'class POINT' (or there is not acceptable conversion)
   cout<<"\nd="<<d<<endl;
getch(); //////////////// tu vois à l'écran ton résultat, ça fait une pause
   return(0);
}

sinon concernant les surcharge d'opérateur, un exo que j'avais vu en cours :

Code : Tout sélectionner

#include<iostream>
#include<string.h>
using namespace std;

class vecteur3d{
	float x,y,z;
	public:
		vecteur3d(float c1=0.0, float c2=0.0, float c3=0.0){
			x=c1;y=c2;z=c3;
		}
		
		void affichage(void){
			cout << "Coordonnées du vecteur : "<< x <<" "<<y<<" "<<z;
		}
		
		friend int operator == (vecteur3d,vecteur3d);
};


int operator == (vecteur3d a,vecteur3d b){
	
	if( (a.x == b.x) && (a.y == b.y) && (a.z == b.z )){
		cout <<"les deux points ont les meme coordonnees \n\n";
		return 1;
	}
	cout <<"les deux points n'ont pas les meme coordonnees \n\n";
	return 0;
}

si tu trouve la réponse à ton problème, oublie surtout pas de nous donner la correction ;)
sinon des pro pour te répondre c developpez.com un site de programmation.

ah oui, tu compile avec quoi?
j'ia pris devc++ , c récent gratuit et léger (10 mo?) d'où aussi le namespace.
si tu développe avec visual 6 c++ alors t'a pas le namespace à mettre et et c void main, le standard c la norme ISO et devc++ compile selon le standard, donc j'ai mis int void main , la fonction principale veut qqch en retour, donc je lui donne un 0 à la fin d'où le return(0)

@+ dsl de pouvoir t'aider davantage

++
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

J'avais deje essayer les trucs du style
d= = P3;
d=(=P3);
J'ai bien défini ma surcharge mais je sais pas l'utiliser dans mon main c'est un peu con quand meme lol
Le pire c'est que j'ai déjà réussi à faire une surchage réel = complexe et à l'utiliser mais celle la rien à faire et je suis sur que c'est un truc bidon en plus...
gazier9
Messages : 41
Enregistré le : 18 févr. 2006 00:50
Localisation : Btz

Message par gazier9 »

desolé je ne pourrais pas t'aider!! :D
j' essaye de comprendre deja!! :blush:
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Je programme avec visual c++ 6.0
J’ai déjà utilisé Dev mais je n’ai jamais compris pourquoi il veut :

Code : Tout sélectionner

int main()
{
	return 0 ;
}
Je ne vois pas l’intérêt à ce que le main retourne un entier en plus à rien du tout…

Avec visual quand on test le code en le compilant et en l’exécutant il fait lui-même une pose à la fin pour pas que la fenêtre MS-DOS se ferme toute seul. J’utilise le gecth() uniquement lorsque je que je me sert de l’exécutable après et comme là je ne me servirai jamais du prog après je ne le mets pas.

Au plus tard j’aurai la réponse lundi à mon problème j’ai cours de C++ le matin et je vous la donne.
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

c pas une question d'intéret mais de standard.
l'idéal c qd on code en C ou C++ ANSI
genre ton code tu pourra le compiler sous linux aussi

devc++ c plus indépendant que visual et c comme partout, visual est + utilisé meme si un bon code c plus un code standard.
enfin bon fo voir sur internet pour plus de détail mais n'y voit pas de "mal" ds ça. (et je ne suis pas pro devc++ parce que question débogage suis un peu largué dessus mais ça me fait chier d'installe une "bazooka lourdingue" de visual pour un tit prog alors qu'en 10 mo je peux faire un taf aussi)
sinon tu crois que c normal que ta fenetre soit en pause alors que t'a rien mis ds ton code? lol et auras tu le meme résultat en exécutant l'exécutable indépendamment?

voilà pk fo comprendre, microsoft ce qui est énervant c le non respect de standard souvent et on prend de mauvaise habitudes et qd après on comprend pas pk ça marche pas... :D

bientot je devrai compiler du C sur linux....et je vais en baver, ça risque d'etre strictement standard donc on va se poser des question, pk ça marche pas alors que ça marchait sur windows lolzz
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Naveed a écrit : mais n'y voit pas de "mal"
Je ni vois pas de mal lol.
J’utilise Visual parce que c’est ce qu’on utilise à l’école (elle nous fourni le logiciel).

Naveed a écrit : sinon tu crois que c normal que ta fenetre soit en pause alors que t'a rien mis ds ton code? lol et auras tu le meme résultat en exécutant l'exécutable indépendamment?
Non je ne dis pas que c’est normal (j’ai du mal m’expliquer plus haut lol).

Si je ne mais pas quelque chose pour que ça fasse une pause c’est sûr que si je prend l’exécutable indépendamment la fenêtre se fermera toute seul, mais comme pour ce petit programme je ne prendrai jamais l’exécutable indépendamment bah je mets pas le getch() :oops: .

C’est vrai que l’on prend très vite de mauvaises habitudes !!!
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

pour informations à ce que je sache, getch(); n'est pas standard, avant dev-c++ en voulais pas, maintenant il l'accepte, alors la norme a évolué? ç a été rajouté dans devc++ ? je sais pas, par contre c la méthode la plus simple pour une pause.
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Il me semble qu'il y a un truc avec sytem("PAUSE"); aussi pour faire une pause mais je suis pas sur ...
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

c vrai (moi je l'efface tt le temps et je met getch par habitude)
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Naveed
J'ai essayé de compiler le code suivant que tu as donné avec Dev-C++ que je viens de telecharger et il trouve des erreurs partout :o :o :o :o
Tu l'as compilé sans probleme toi?

Code : Tout sélectionner

#include <iostream> 
#include <math.h>
#include <conio.h> 

using namespace std; 

class POINT
{
private:
   float X,Y,Z;

public:
   POINT();
   POINT(float A,float B);
   POINT(float A,float B, float C);
   T();
   T(float Z);
   T(float P1, float P2);
   T(float P1, float P2, float P3);
   float operator=(POINT P);
   void Voir();
};

POINT::POINT()
{
   X=0;
   Y=0;
   Z=0;
};

POINT::POINT(float A, float B)
{
   X=A;
   Y=B;
   Z=5;
};


POINT::POINT(float A,float B, float C)
{
   X=A;
   Y=B;
   Z=C;
};

POINT::T()
{
   X-=5;
   Y-=4;
   Z-=3;
};

POINT::T(float P1)
{
   Z=P1;
};

POINT::T(float P1, float P2)
{
   X=P1;
   Y=P2;
};

POINT::T(float P1, float P2, float P3)
{
   X=P1;
   Y=P2;
   Z=P3;
};

float POINT::operator=(POINT V1)
{
   float R;
   R=(X*X)+(Y*Y)+(Z*Z);
   R=sqrt(R);
   return R;
};

void POINT::Voir()
{
   cout<<"\nLe point est defini par X="<<X<<", Y="<<Y<<", Z="<<Z<<"\n\n\n\n\n";
};

int main()
{
  float d;
   POINT P1;
   cout<<"\n---Affichage du point P1---\n";
   P1.Voir();
   POINT P2(2,3);
   cout<<"\n---Affichage du point P2---\n";
   P2.Voir();
   POINT P3(1,3,5);
   cout<<"\n---Affichage du point P3---\n";
   P3.Voir();
   P3.T();
   cout<<"\n---Affichage de P3 apres apllication de la fonction T()---\n";
   P3.Voir();
   P3.T(3,4);
   cout<<"\n---Affichage de P3 apres apllication de la fonction T(3,4)---\n";
   P3.Voir();
   P3.T(4,5,8);
   cout<<"\n---Affichage de P3 apres application de la fonction T(4,5,8)---\n";
   P3.Voir();
   cout<<"\n---Distance par rapport au centre du point P3---\n";
   d=P3;//erreur ici l
   cout<<"\nd="<<d<<endl;
   getch(); 
   return(0);
} 
Si ca marche chez toi et pas chez moi avec le meme compilateur je comprend plus rien la ...
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

y a plusieurs erreurs qui sont de meme type mais c une question de standard "iso c++ interdit...."
et après ya l'erreur de la conversion du point float.

les erreurs elles sont bien là (je t'ai dit ce que j'avais changé et pk avant)
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Salut,
Non j'oubli pas de donner la réponce au probleme c'est just que je ne la trouve pas ...
J'ai demandé a mon prof d'info et à des gua de l'EPITA (ecole d'ingénieur en informatique) personne comprend l'erreur...
Voila si j'ai du nouveau je ferrai signe.
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

as tu posté sur developpez.com ?
eux obligé ils trouvent.
++
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

non pas encore je pencé que les guas de l'EPITA aller trouver :o
Naveed
Messages : 2001
Enregistré le : 13 sept. 2003 13:03
Localisation : 91 (Essonne)
Contact :

Message par Naveed »

l'épita je m'en fous, c pas une référence pour moi, c des étudiant en informatique comme d'autres
je t'ai dit developpez.com où se trouvent des pros et étudiants
enfin bref j'arrete de poster, fais comme tu veux.

tu nous diras qd qqn trouveras
:: Naveed ::
Site : http://naveed.free.fr
Livre d'or : http://www.swisstools.net/guestbook.asp?id=27217
"Loin de moi toute prétention de génie, mais si je puis vous aider..."
Image
Sebome
Messages : 169
Enregistré le : 07 sept. 2005 20:21
Localisation : Région parisienne

Message par Sebome »

Naveed je prend pas l'EPITA pour une référence c'est just que c'est une ecole d'info et que je les vois tous les jours c tout.


Alors aparament c'est un probleme avec un visual parce que ca marche sur un vieu compilateur dont je ne me rapel plus le nom.
A ce que j'ai cru comprendre c'est histoire d'evolution de norme mais je suis pas sur d'avoir bien compris c'est mon prof d'info qui m'a expliqué ça vite fais entre deux cours.
Répondre