Programme point
zmandar
-
loupius Messages postés 789 Statut Membre -
loupius Messages postés 789 Statut Membre -
Bonjour,
j 'ai créé cette classe point dans un fichier point.h
et j 'ai fait le main
lorsque je fait l 'exécution il me dit error C2065: 'point' : identificateur non déclaré
svp iade moi à corriger cette erreurs
j 'ai créé cette classe point dans un fichier point.h
class point
{private:
int abs ;
int ord;
public:
void initialise(int ,int);
void deplace(int ,int);
void affiche();
void point::initialise(int x,int y)
{ abs=x;
ord=y;
}
void point::deplace(int x,int y)
{abs =abs+x;
ord=ord+y;
}
void point::affiche(){
cout<< "("<<x<<"," << y <<")" ;
}
et j 'ai fait le main
// exercice2.cpp : définit le point d'entrée pour l'application console.
//
#include " point.h"
#include "stdafx.h"
int main ()
{
point p1 ;
p1.initialise(1,3);
p1.deplace(4,3);
p1.affiche();
}
lorsque je fait l 'exécution il me dit error C2065: 'point' : identificateur non déclaré
svp iade moi à corriger cette erreurs
A voir également:
- Programme point
- Programme demarrage windows - Guide
- Point de suite word - Guide
- Point de restauration - Guide
- Point gps - Guide
- Message programmé - Guide
3 réponses
Tu ne dois pas mettre point:: si tu implémentes tes méthodes dans le header, c'est nécessaire par contre lorsque tu fais l'implémentation dans un .cpp
Remarque : ta méthode initialise a l'air de faire ce qu'on attend d'un constructeur, donc implémentes plutôt le constructeur !
Remarque : ta méthode initialise a l'air de faire ce qu'on attend d'un constructeur, donc implémentes plutôt le constructeur !
J'ai vu dans ton code #include "stdfax.h", sauf erreur c'est un en-tête pré-compilé Visual Studio, c'est possible que ça te pose problème.
Quand tu créé un nouveau projet, tu devrais cocher la case "projet vide" plutôt que "en-tête précompilé"
Ensuite tu fais ajouter une classe C++
Nom de la classe point, le reste par défaut.
Tu colles mon code à la place de celui généré.
Puis nouvel élément fichier c++, nom : exercice2, et tu colles mon code.
Puis tu compiles, et là il y a une erreur facile à résoudre, dans point::affiche, ce n'est pas x et y, mais abs et ord qu'il faut afficher. Mais sinon, ça marche, et ça t'affiche (5,6)
La confiance n'exclut pas le contrôle
Quand tu créé un nouveau projet, tu devrais cocher la case "projet vide" plutôt que "en-tête précompilé"
Ensuite tu fais ajouter une classe C++
Nom de la classe point, le reste par défaut.
Tu colles mon code à la place de celui généré.
Puis nouvel élément fichier c++, nom : exercice2, et tu colles mon code.
Puis tu compiles, et là il y a une erreur facile à résoudre, dans point::affiche, ce n'est pas x et y, mais abs et ord qu'il faut afficher. Mais sinon, ça marche, et ça t'affiche (5,6)
La confiance n'exclut pas le contrôle
Mais Visual Studio te le dit pourquoi :
En corrigeant, il vient deux avertissements :
Puis tu recompiles, et il reste un dernier avertissement :
Au final tu devras donc avoir :
error C2668: 'sqrt' : appel ambigu à une fonction surchargée -> il ne faut pas utiliser int dx, dy, mais float dx, dy puisque ton return est de type float error C2228: la partie gauche de '.p' doit avoir un class/struct/union -> abs n'est pas un objet, tu ne peux pas faire abs.p, il faut faire p.abs error C2228: la partie gauche de '.p' doit avoir un class/struct/union -> ord n'est pas un objet, tu ne peux pas faire ord.p, il faut faire p.ord
En corrigeant, il vient deux avertissements :
warning C4244: 'initialisation' : conversion de 'int' en 'float', perte possible de données -> remplace float dx par double dx warning C4244: 'initialisation' : conversion de 'int' en 'float', perte possible de données -> remplace float dy par double dy
Puis tu recompiles, et il reste un dernier avertissement :
warning C4244: 'return' : conversion de 'double' en 'float', perte possible de données -> remplace float point::distance, par double::distance
Au final tu devras donc avoir :
double point::distance(point p )
{
double dx=abs-p.abs;
double dy=ord-p.ord;
return sqrt(dx*dx+dy*dy);
}
error C2556: 'double point::distance(point)' : la fonction surchargée ne diffère que par le type de retour de 'float point::distance(point)'
voir la déclaration de 'point::distance'
error C2371: 'point::distance' : redéfinition ; types de base différents
voir la déclaration de 'point::distance'
error C3861: 'sqrt' : identificateur introuvable
il m 'affiche ses erreurs
voir la déclaration de 'point::distance'
error C2371: 'point::distance' : redéfinition ; types de base différents
voir la déclaration de 'point::distance'
error C3861: 'sqrt' : identificateur introuvable
il m 'affiche ses erreurs
error C2556: 'double point::distance(point)' : la fonction surchargée ne diffère que par le type de retour de 'float point::distance(point)' voir la déclaration de 'point::distance' error C2371: 'point::distance' : redéfinition ; types de base différents voir la déclaration de 'point::distance' -> pour distance, tu n'as pas modifié float en double dans point.h error C3861: 'sqrt' : identificateur introuvable -> #include "math.h"
// point.h #include <iostream> class point { private: int abs; int ord; public: void initialise(int x,int y) { abs=x; ord=y; } void deplace(int x,int y) { abs =abs+x; ord=ord+y; } void affiche() { std::cout << "(" << x << "," << y << ")"; } };Ou on sépare déclaration et implémentation (conseillé)
// point.h class point { private: int abs; int ord; public: void initialise(int,int); void deplace(int,int); void affiche(); }; // point.cpp #include <iostream> #include "point.h" void point::initialise(int x,int y) { abs=x; ord=y; } void point::deplace(int x,int y) { abs=abs+x; ord=ord+y; } void point::affiche() { std::cout << "(" << x << "," << y << ")"; }Dans les deux cas, le main est correct.
Maintenant, je modifie ce code pour mettre en place le constructeur (encore mieux)
// point.h class point { private: int abs; int ord; public: point(int,int); void deplace(int,int); void affiche(); }; // point.cpp #include <iostream> #include "point.h" point::point(int x,int y) { abs=x; ord=y; } void point::deplace(int x,int y) { abs=abs+x; ord=ord+y; } void point::affiche() { std::cout << "(" << x << "," << y << ")"; }Dans ce cas le main devient :
#include "point.h" int main() { point p1(1,3); p1.deplace(4,3); p1.affiche(); return 0; }#include <iostream>
using namespace std ;
class point
{private:
int abs ;
int ord;
public:
void initialise(int ,int);
void deplace(int ,int);
void affiche();};
le fichier point.cpp
#include "point.h"
#include "sstream"
void point::initialise(int x,int y)
{ abs=x;
ord=y;
}
void point::deplace(int x,int y)
{abs =abs+x;
ord=ord+y;
}
void point::affiche(){
cout<< "("<<x<<"," << y <<")" ;
}
et le main
// exercice2.cpp : définit le point d'entrée pour l'application console.
//
#include "point.h"
#include "stdafx.h"
int main ()
{
point p1 ;
p1.initialise(1,3);
p1.deplace(4,3);
p1.affiche();
}
je fait comme ca mais aussi ne pas exécutable svp aide moi
pour faire un fichier point.h je fait fichier->nouveau fichier ???