IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

petit problème de classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut petit problème de classe
    voila, je m'entraine à faire passer des valeurs d'une fonction vers une fonction membre d'une class grâce aux pointeurs. Seulement j'ai un petit problème lors de la compilation. Il me signale qu'il ne peut pas convertir double en double .
    J'avoue que j'ai pas trop suivit.

    le code est le suivant:

    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
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <math.h>
     
    using namespace std;
     
    class chgcoord
    {
    	public:
     
    		double changement_de_coordonnees(double* r, double* t, double* f)
    	{
    		double x=r*cos(t)*sin(f);
    		double y=r*sin(f)*sin(t);
    		double z=r*cos(f);
    		return x,y,z;
    	}
    	protected :
     
    };
     
    int main()
    {
    	double r=20;
    	double t=45;
    	double f=45;
     
    	chgcoord cc;
     
    	chgcoord* pcc;
    	pcc = &cc;
    	pcc->changement_de_coordonnees(&r,&t,&f);
    	cout<< " x = " << x << endl << "y = " << y << endl << "z=" << z << endl;
    	system ("PAUSE");
    }
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double changement_de_coordonnees(double* r, double* t, double* f)
    	{
    		double x=r*cos(*t)*sin(*f);
    		double y=r*sin(*f)*sin(*t);
    		double z=r*cos(*f);
    		return x,y,z; //quant a ça aucune de ce que ça donne, un seul return par fonction
    	}
    tu veux la valeur, pas l'adresse de ta valeur.

  3. #3
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    et puis j avais pas vu mais ca peux pas marcher !
    ton main ne connait pas les variables x y et z.
    (une variable n'a que la portée des accolades qui l'entoure).

    De plus une methode ne peux retourner qu une seule variable, ici il faudrait faire :

    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
     
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <math.h>
     
    using namespace std;
     
    class chgcoord
    {
    	public:
     
    		void changement_de_coordonnees(double* r, double* t, double* f, double* x, double *y, double *z )
    	{
    		double *x=(*r)*cos(*t)*sin(*f);
    		double *y=(*r)*sin(*f)*sin(*t);
    		double *z=(*r)*cos(*f);
    	}
    	protected :
     
    };
     
    int main()
    {
    	double r=20;
    	double t=45;
    	double f=45;
     
    double res1 = 0;
    double res2 = 0;
    double res3 = 0;
     
    	chgcoord cc;
     
    	chgcoord* pcc;
    	pcc = &cc;
    	pcc->changement_de_coordonnees(&r,&t,&f, &res1, &res2, &res3 );
    	cout<< " x = " << res1 << endl << "y = " << res2 << endl << "z=" << res3 << endl;
    	system ("PAUSE");
    }
    revois les notions de bases, ils te restent un ou deux flottement.
    Il faut que tu connaisses tout ca sur le bout des doigts pour continuer

    courage

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Ici, j'essaie simplement de passer de coordonnées polaire à des coordonnées cartésiennes.

    Si je comprend bien, je ne peux retourner qu'une valeur par fonction. Donc si je veux les coordonnées dans l'espace, il me faudra 3 fonctions différentes??

    Sinon, moi ce que j'ai essayer de faire avec cette class, c'est un peu comme on fait avec une fonction. Ce que j'ai essayé de faire c'est d'envoyer l'adresse des mes variables à la fonction membre pour qu'elle puisse les modifier.

    Si jamais je crée 3 fonctions différentes, et que je passe mes coordonnées de départ par valeur, est ce que c'est correcte??

    P.S: quand je compile le code que vous m'avez passé,il me marque toujours la même erreur

  5. #5
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Pour ton probleme de retour de fonction, dans ma solution je passe en argument 3 pointeurs sur double qui servent a retourner le resultat.

    Pour ton probleme de compilation c'est sur quel code, quelle ligne et le message exact du compilo stp

    en fait, j avais pas vu que tu declarais tes 3 coord x,y et z dans ta classe.
    mais pour les atteindre faut faire
    cc.x
    cc.y
    cc.z

    ou par ton pointeur avec des "->"

    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
     
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <math.h>
     
    using namespace std;
     
    class chgcoord
    {
    	public:
    	        double x, y, z;
    		void changement_de_coordonnees(double* r, double* t, double* f )
    	{
    		x=(*r)*cos(*t)*sin(*f);
    		y=(*r)*sin(*f)*sin(*t);
    		z=(*r)*cos(*f);
    	}
    	protected :
     
    };
     
    int main()
    {
    	double r=20;
    	double t=45;
    	double f=45;
     
    	chgcoord cc;
            //pas besoin de passer par un pointeur, un simple objet suffit tres bien
            // et ca evite de faire de l allocation dynamique, ou de passer l adresse de ton obj a un pointeur
    	cc.changement_de_coordonnees(&r,&t,&f);
     
    	cout<< " x = " << cc.x << endl << "y = " << cc.y << endl << "z=" << cc.z << endl;
    	system ("PAUSE");
    }

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Les gens, les références ca existe.
    Et puis une fonction qui passe du carthésien au polaire et qui prend 6 paramètres , je trouve ca beaucoup.
    Voici ce que je propose:
    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
     
     
    #include <iostream>
    #include <cmath>
     
    using namespace std;
     
    class chgcoord
    {
    	public:
     
    	struct carthe 
                 {
                    double x,y,z;  
                    carthe(double xx=0,double yy=0,double zz=0):x(xx),y(yy),z(zz){} 
                 };
     
                 struct pol {double r,t,f;pol(double rr,double tt,double ff):r(rr),t(tt),f(ff){} };
     
                  static void changement_de_coordonnees(chgcoord::carthe& c,const chgcoord::pol& p  )
    	{
    		c.x=p.r*cos(p.t)*sin(p.f);
    		c.y=p.r*sin(p.f)*sin(p.t);
    		c.z=p.r*cos(p.f);
    	}
    };
     
    int main()
    {
                 chgcoord::pol p(20,45,45);
                 chgcoord::carthe result;
     
    	chgcoord::changement_de_coordonnees(result, p);
    	cout<< " x = " << result.x << endl << "y = " << result.y << endl << "z=" << result.z << endl;
     
    }
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    l'erreur se trouve dans la première ligne de code de ma fonction membre. X étant une valeur du type double, et les valeurs passées à cos et à sin également, il me dit qu'il ne peut pas convertir des double en double dans l'initialisation.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    Bonjour,

    Beaucoup de points qui ne vont pas :
    - dans ta version, changement_de_coordonnees doit retourner un double ce que tu ne fais pas.
    - x, y, z sont définis localement dans ta méthode de classe (donc inaccessibles car inexistants ailleurs.

    J'ai corrigé les quelques points évidents pour te permettre de continuer.


    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
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <math.h>
     
    using namespace std;
     
    class chgcoord
    {
        public:
     
            double x, y, z;
     
            void changement_de_coordonnees(double* r, double* t, double* f)
            {
                x=r*cos(t)*sin(f);
                y=r*sin(f)*sin(t);
                z=r*cos(f);
     
            }
        protected :
     
    };
     
    int main()
    {
        double r=20;
        double t=45;
        double f=45;
     
        chgcoord* pcc = new chgcoord();
        pcc->changement_de_coordonnees(&r,&t,&f);
        cout<< " x = " << pcc->x << endl << "y = " <<  pcc->y << endl << "z=" << pcc->z << endl;
        system ("PAUSE");
    }
    A+,
    Agamitsudo.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    J'ai laissé une erreur ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            void changement_de_coordonnees(double* r, double* t, double* f)
            {
                double rr, tt, ff;
                rr = *r;
                tt = *t;
                ff = *f;
     
                x=r*cos(t)*sin(f);
                y=r*sin(f)*sin(t);
                z=r*cos(f);
     
            }
    Mais sinon, je trouve que ce code n'a pas beaucoup de sens. Quelles sont les questions que tu te posais autour de ce test ?

    A+,
    Agamitsudo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de classe foncteur template
    Par ailonn dans le forum C++
    Réponses: 6
    Dernier message: 18/06/2011, 23h25
  2. Réponses: 1
    Dernier message: 28/10/2010, 16h16
  3. Java class + Java Bean d'interface = petit problème
    Par Nyphel dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/01/2007, 14h52
  4. Réponses: 4
    Dernier message: 15/10/2006, 18h05
  5. [VB.NET]petit problème avec la classe string !!
    Par zouhib dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/06/2006, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo