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 :

Deux classes d�pendantes de la m�me structure - Probl�me de d�claration anticip�e


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par d�faut Deux classes d�pendantes de la m�me structure - Probl�me de d�claration anticip�e
    Bonjour,

    J'ai pas trouv� de r�ponse � mes questions en fouillant sur le web alors je poste sa ici:

    J'ai cod� avec la fac un header "complex.h" - dont je suis tr�s fier - qui contient une structure Complex ainsi que pleins de fonctions qui me permettent de faire des op�rations dessus (j'en met une pour l'exemple)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct Complex
    {
        float x, y;  
    };
     
    Complex operator+ (Complex c1, Complex c2)
    {
        Complex cr;
        cr.x = c1.x + c2.x;
        cr.y = c1.y + c2.y;
        return cr;
    }

    Initialement, j'avais une structure A qui poss�dait un tableau d'une structure B.
    Les deux structures utilisaient le m�me header, tout fonctionnais parfaitement bien, jusqu�� ce que je me d�cide � structurer mon programme (tout le code �tait dans le m�me fichier) et que je transforme ces structures en classes.

    ->A et B ont des struct Complex comme attributs et m�thodes


    H�las, sa a pas plus a mon compilo:
    Dans un premier temps, pour �viter la double d�finition, j'ai chang� le "#include "complex.h"" dans les headers de mes deux classes par une d�finition plus propre "struct complex;".
    J'en ai profit� pour d�caller mon include dans mon main.

    Ensuite �a m'as affich� l'erreur suivante que j'ai pu esquiver en rempla�ant les attributs et m�thodes de mes classes par des pointeurs : de "Complex m_position" je suis pass� � "Complex* m_position"
    error: return type 'struct Complex' is incomplete

    A ce point la, les accesseurs ont l'air de fonctionner (en tout cas ils compilent) mais je n'arrive pas � utiliser les fonctions qui sont dans mon complexe.h, logique puisque je fait des op�rations non plus sur des complexes, mais sur des pointeurs de complexe.
    Par contre j'avoue que je ne sais pas comment g�rer les pointeurs de cette fa�on

    J'aurais besoins d'un peu d'aide pour faire tourner un programme qui ressemble � �a avec l'aide de l'operator+ que j'ai d�fini plus haut dans le header:
    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
    class B
    {
        public:
            B();
            void avancer();
    
        private:
            Complex* m_position
            Complex* m_vitesse
    };
    
    void B::avancer()
    {
        this->m_position = this->m_position + this->m_velocite;  //j'en profite pour vous demander si le this-> est utile ou non dans ce cas
    }

  2. #2
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    C'est un probl�me assez classique en C++ On ne pas faire de d�claration anticip�e des structures ("forward declaration" en anglais)

    Source stackoverflow : Forward declaration of struct

    Donc la solution Je ne sais pas, tout mettre dans la m�me ent�te (.h) et faire diff�rentes sources si n�cessaire (complex.cpp, A.cpp et B.cpp - en C++, on peut avoir plusieurs sources .cpp/ .c pour 1 ent�te .h)

    Et avoir une ent�te style (mais pas s�r que cela fonctionne )

    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
    struct Complex {
    };
     
     
    // Forward Declaration
    class B;
     
    class A {
    //  ...
     
        std::vector<B> tab;
    };
     
     
    class B {
    };

  3. #3
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par d�faut
    Wow! Je ne pensais pas que la solution tomberai si vite

    J'ai repris l'ent�te que tu m'as envoy� et sa marche nikel

    on peut avoir plusieurs sources .cpp/ .c pour 1 ent�te .h
    J'aurais mis longtemps avant de comprendre cette phrase, j'ai pris la mauvaise habitude d��crire le corps de mes fonctions dans des .h et mon probl�me part de la

    Merci beaucoup!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ces deux classes font-elles la m�me chose ?
    Par topolino dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 08/01/2016, 13h53
  2. R�ponses: 3
    Dernier message: 08/02/2013, 11h03
  3. R�ponses: 6
    Dernier message: 30/05/2012, 20h19
  4. Deux classes CSS pour une m�me cellule d'un tableau
    Par bernidupont dans le forum Mise en page CSS
    R�ponses: 3
    Dernier message: 04/05/2011, 21h34
  5. R�ponses: 1
    Dernier message: 30/08/2010, 12h15

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