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 :

Utiliser une classe en paramètres


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut Utiliser une classe en paramètres
    Bonjour,

    J'ai créé deux classes :
    - une classe Matrix33
    - une classe Vector3D.

    Je souhaite créer à partir d'un Vector3D et d'un double une Matrix33.

    Voici le code qui fonctionne en passant des "double" en argument du constructeur :

    dans Vector3D.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    	//Matrix33 M(axis,rotation_angle); // axis de classe Matrix33 et rotation_angle de type double
    	Matrix33 M(xa, ya, za, rotation_angle); // 4 de type double
    dans Matrix33.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
    //Matrix33::Matrix33(Vector3D axis, double rotation_angle)
    Matrix33::Matrix33(double xa, double ya, double za, double rotation_angle)
    {
    	double c;
    	double s;
    	//double xa;
    	//double ya;
    	//double za;
     
    	//xa = axis.GetX();
    	//ya = axis.GetY();
    	//za = axis.GetZ();
     
    	c = cos(rotation_angle);
    	s = sin(rotation_angle);
     
    	x1 = xa*xa + (1-xa*xa) * c;		
    	x2 = xa*ya * (1-c) - za * s;		
    	x3 = xa*za * (1-c) + ya * s;
    	y1 = xa*ya * (1-c) + za * s;	
    	y2 = ya*ya + (1-ya*ya) * c;			
    	y3 = ya*za * (1-c) - xa * s;
    	z1 = xa*za * (1-c) - ya*s;		
    	z2 = ya*za * (1-c) + xa * s;		
    	z3 = za*za + (1-za*za) * c;
    bien sûr, je souhaiterais passer un Vector3D en argument plutôt que trois doubles. Dans ce cas, j'obtiens l'erreur :
    error C2061: erreur de syntaxe*: identificateur 'Vector3D'

    Pourtant, intellisense reconnaît Vector3D.

    Quelqu'un a une explication ?
    Merci

    A ce propos, dans Vector3D.h, j'ai #include "Matrix33.h"
    et dans Matrix33.h, j'ai #include "Vector3D.h"
    ça choque quelqu'un ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 150
    Billets dans le blog
    4
    Par défaut
    1° : ne jamais croire intellisense, c'est supra à chier je trouve, en plus de faire ramer la solution
    2° : il n'y a aucun code qui indique ce que tu veux et ton erreur, ma boule de cristal n'a donc rien pu analyser

    néanmoins, comme souvent, il s'agit sûrement d'un problème d'include ou plutot nécessitant de forward declaration.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    En fait, quand j'utilise le code tel quel (dans mon premier post), tout fonctionne :
    J'appelle le constructeur de Matrix33 qui admet 4 "double" en paramètres.

    Si j'enlève les // dans le code de mon premier post, pour utiliser ma classe Vector3D en paramètre du constructeur de Matrix33 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matrix33::Matrix33(Vector3D axis, double rotation_angle)
    alors j'obtiens l'erreur :
    error C2061: erreur de syntaxe*: identificateur 'Vector3D'
    pourtant j'écris dans Matrix33.h :

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Comment est déclaré Vector3D, dans Vector3D.h ?

  5. #5
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    oui, c'est une classe dont la déclaration est dans Vector3D.h

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 150
    Billets dans le blog
    4
    Par défaut
    Pas du tout, si tu avais lu et reprends mon premier post:
    Citation Envoyé par Bousk Voir le message
    problème d'include [...] nécessitant (une) forward declaration.
    Pour le reste, je laisse la fonction recherche et/ou google t'aiguiller sur un problème rencontré des dizaines et des dizaines de fois sur ce même forum.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    OK merci.

    http://cpp.developpez.com/faq/cpp/?page=projet

    Désolé, je code mes premières classes.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,

    F.A.Q. Comment créer 2 classes qui font référence l'une à l'autre ?

    Ceci dit, j'ai du mal à voir pourquoi vector3D devrait dépendre de Matrice3D.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 150
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par jdddeschamps Voir le message
    A ce propos, dans Vector3D.h, j'ai #include "Matrix33.h"
    et dans Matrix33.h, j'ai #include "Vector3D.h"
    ça choque quelqu'un ?
    Citation Envoyé par Bousk Voir le message
    Forward declaration
    puis la syntaxe de ta fonction est pas terrible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matrix33::Matrix33(Vector3D axis, double rotation_angle)
    tu passes une copie de l'objet
    préfère les références, constantes si elle n'est pas modifiée (const&)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    Ok,

    capito : écrire
    #include "Vector3D.h" dans Matrix33.h
    et
    #include "Matrix33.h" dans Vector3D.h
    crée une foward declaration. Je vais réfléchir au moyen de contourner le problème

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/04/2006, 09h57
  2. Passer une classe en paramètre
    Par Tex-Twil dans le forum C++
    Réponses: 17
    Dernier message: 30/11/2005, 20h00
  3. [Applet]utiliser une classe d'un package dans une applet
    Par jeromejanson dans le forum Applets
    Réponses: 1
    Dernier message: 30/06/2005, 08h13
  4. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57
  5. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41

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