begin process at 2012 05 29 04:13:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Interaction entre objets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Interaction entre objets

jeudi 29 juin 2006 à 16:47:00 | Interaction entre objets

kharrat

Salut,

Je cherche à implémenter une relation d'association 1-1 entre 2 objets de 2 classes différentes.

Mon code:
------------------------------------------
class Obj1
{
private:
   Obj2 *lienObj2 ;
} ;

class Obj2
{
private:
   Obj1 *lienObj1 ;
} ;
------------------------------------------
Bien entendu, ce code génère une erreur de compilation car la classe Obj1 ne connait pas la classe Obj2 (définie plus bas). J'ai bien essayé de déclarer la classe Obj2 au dessus de Obj1 en écivant:
------------------------------------------
class Obj2 ;
------------------------------------------
au dessus de la définition de Obj1, mais cela ne marche toujours pas.

Je crois que ce problème est très facile à résoudre, mais je n'ai pas trouvé comment . Quelqu'un pourrait-il me donner un petit coup de pouce ?

Merci,
Kharrat
jeudi 29 juin 2006 à 17:56:34 | Re : Interaction entre objets

vecchio56

Administrateur CodeS-SourceS
Comme tu le dis, ceci devrait marcher:

class Obj2;
class Obj1
{
private:
   Obj2 *lienObj2 ;
} ;

class Obj2
{
private:
   Obj1 *lienObj1 ;
} ;

_____________________________________
Un éditeur de ressources gratuit pour Windows

vendredi 30 juin 2006 à 00:09:30 | Re : Interaction entre objets

kharrat

J'ai essayé ça avec trois compilateurs différents et ça ne marche pas... : Visual 6, Dev et xlC (un compilo Unix).
vendredi 30 juin 2006 à 10:17:54 | Re : Interaction entre objets

luhtor

J'ai testé sous devcpp, ca marche très bien.


vendredi 30 juin 2006 à 10:34:30 | Re : Interaction entre objets

kharrat

Ce bout de code là marche. Mais as-tu essayé d'envoyer des messages à Obj2 depuis Obj1 ?
vendredi 30 juin 2006 à 11:28:35 | Re : Interaction entre objets

vecchio56

Administrateur CodeS-SourceS
Donne un code qui ne marche pas pour illustrer tes propos

_____________________________________
Un éditeur de ressources gratuit pour Windows

vendredi 30 juin 2006 à 11:48:43 | Re : Interaction entre objets

kharrat

Ok, voir ci-dessous:
--------------------------------------------------------------------------
#include <iostream>
using namespace std ;

class O1 ;

class O2
{
private:
        O1 *lienO1 ;
public:
        O2()
        {
                lienO1 = new O1() ;
                cout << "++ Construction d'un O2" << endl ;
        }
        ~O2()
        {
                cout << "-- Destruction d'un O2" << endl ;
        }
        void jeTravaillePourO2()
        {
                cout << "Je travaille pour O2" << endl ;
        }
        void O22O1()
        {
                lienO1->message() ;
        }
} ;

class O1
{
private:
        O2 *lienO2 ;
public:
        O1()
        {
                cout << "++ Construction d'un O1 sans parametre" << endl ;
        }
        O1(O2 *extO2)
        {
                cout << "++ Construction d'un O1" << endl ;
                this->lienO2 = extO2 ;
        }
        ~O1()
        {
                cout << "-- Destruction d'un O1" << endl ;
        }
        void jeTravaillePourO1()
        {
                lienO2->jeTravaillePourO2() ;
        }
        void message()
        {
                cout << "J'envoie un message de O2 vers O1" << endl ;
        }
} ;

int main()
{
        O2 *unO2Tas = new O2() ;
        O1 *unO1Tas = new O1(unO2Tas) ;

        unO1Tas->jeTravaillePourO1() ;

        delete unO1Tas ;
        delete unO2Tas ;

        return 0 ;
}
---------------------------------------------------------------------

Pour info: voici le message que je reçoit à la compilation:

"Obj.cpp", line 13.26: 1540-1109 (S) The use of undefined class "O1" is not valid.
"Obj.cpp", line 26.23: 1540-0251 (S) The "->" operator cannot be applied to the undefined class "class O1".

+,
Kharrat

vendredi 30 juin 2006 à 12:00:41 | Re : Interaction entre objets

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Oui d'accord, mais c'est parce que tu ne sépare pas assez l'interface du code. Dans O2, tout ce qui concerne O1 (sauf la déclaration du pointeur) ne peut être fait avant la définition de O1.

class O1 ;

class O2
{
private:
  O1 *lienO1 ;
public:
  O2();
  ~O2();
  void jeTravaillePourO2();
  void O22O1();
};

class O1
{
...
};

//Implémentation des méthodes de O2:
O2::O2()
{
  lienO1 = new O1() ; // Le type O1 est bien défini ici
  cout << "++ Construction d'un O2" << endl ;
}

O2::~O2()
{
  cout << "-- Destruction d'un O2" << endl ;
}

void O2::jeTravaillePourO2()
{
  cout << "Je travaille pour O2" << endl ;
}

void O2::O22O1()
{
  lienO1->message() ;
}
_____________________________________
Un éditeur de ressources gratuit pour Windows

vendredi 30 juin 2006 à 12:54:50 | Re : Interaction entre objets

kharrat

Merci vecchio56 !

C'est bon.


Cette discussion est classée dans : class, classe, objets, obj1, obj2


Répondre à ce message

Sujets en rapport avec ce message

petit pb de classe~~ [ par lerilcy ] Bijour a tous... J'ai declare une classe "CBloc" comme il faut (enfin je pense)class CBloc{...}et dans le code des procedures (bloc.cpp): le compilate Pb de class HELP [ par Sosh ] Je maîtrise pas encore bien le cpp mais les class c'est ce que j'ai trouver qui se rapproche le plus de ce que je veux faire. (avoir plusieurs variabl CwinThread urgent [ par langedechu ] Bonjour,J ai un prob avce la classe CWinThread (je vais cracker si je n arrive pas le résoudre).Bon je m'explique : j ai creer une la classe : class c accéder à une variable globale type "class" ? [ par ilimo ] bonjour,comment accéder à une variable globale type "class" dans un autre fichier ?voici exemple plus détaillé : 1- //fichier CC.h-------------------- Liste chainée d'objets de classes différentes [ par gillig ] Voici un problème auquel je ne trouve pas de réponse, enfin, rien d'efficace.J'ai une classe CDessin contenant une liste chaînée (CList) de pointeurs Classe C++ et pointeurs [ par cybermax62 ] je veux utiliser des pointeurs sur des classes. j'écris mon code comme celui-ci :typedef class widget * pwidget;class widget{public:; char * name_s; Ordre de compilation des classes [ par 9sber ] Comment s'assurer qu'une classe est compilée avant une autre?Mon, pb est le suivant.Je suis sous VC++. J'ai une classe "R" qui hérite d'une classe "A" Pb de Multi héritage [ par bach58 ] Je veux définir une classe Z qui hérite d'une autre classe A par deux voies différentes :class A{ int a; ....}class X:A ..{..}class Y:A... {...} tableau dynamique d'objets [ par jonathan100 ] Bonjour a tous! Voici mon probleme. J'ai une classe Voiture dans Voiture.h. Dans le programme principal, je souhaite créer un tableau qui contiendra d classe et agregation... [ par Clonk ] bonjour,j'utilise plusieurs classes ayant des agregations (sous Borland).Disons en gros que si on a :class personne{private:int age;public:void affich


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales