Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
938 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Débutant C++ - Intéractions d'objets de même nom

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Débutant C++ - Intéractions d'objets de même nom

n°1043781
Sve@r
Posté le 12-04-2005 à 10:07:41  profilanswer
 

Bonjour à tous
comme je l'ai dit, je débute en C++ et j'ai un soucis soit conceptuel, soit de connaissances.
 
J'ai un projet en C++. Je l'ai découpé en plusieurs sources, chaque source étant dévolu à une fonction du projet.
Pour certaines fonctions, j'ai quelques trucs à faire. Je me dis que je peux utiliser un objet pour cela. Je défini donc dans le source de la fonction un objet "truc" (nom mis ici pour exemple) qui m'aidera dans l'algo du code de la fonction en question.
Le problème, c'est que j'ai mis le même nom d'objet dans plusieurs sources (avec des méthodes de même nom) et que ça plante à l'édition des liens (méthode xxx() déjà définie ailleurs).
Je pensais que l'objet défini dans un source "x" ne serait connu que dans ce source (un peu comme une fonction "static" ) mais apparemment, ce n'est pas le cas.
 
Donc est-ce que j'ai fait une faute de conception (par exemple on ne défini pas plusieurs objets de même nom dans un programme) ou bien il me manque quelque chose pour que mon idée réussisse ?
 
Merci

mood
Publicité
Posté le 12-04-2005 à 10:07:41  profilanswer
 

n°1043800
LordHarryP​otter
Posté le 12-04-2005 à 10:19:08  profilanswer
 

Sve@r a écrit :

Bonjour à tous
Donc est-ce que j'ai fait une faute de conception (par exemple on ne défini pas plusieurs objets de même nom dans un programme) ou bien il me manque quelque chose pour que mon idée réussisse ?


Oulà qu'est ce que tu appelles objet de meme nom ???
 
C'est le nom de la variable qui est identiqueou "le type" :

Code :
  1. class MonObjet
  2. {
  3.   //...
  4. };


 
Dans ce cas, oui, il ne peuty avaoir qu'une seule déclaration de la classe MonObjet. En effet si tu fais après

Code :
  1. MonObjet mon_tit_objet_a_moi ;
  2. MonObjet mon_tit_objet_aussi_a_moi;


 
Les méthodes de l'objet MonObjet s'applique à mon_tit_objet_a_moi et à mon_tit_objet_aussi_a_moi (c'est une totologie)
 
Snon, tu peux préciser ta question :o

n°1043927
Tarabiscot​e
Posté le 12-04-2005 à 11:25:40  profilanswer
 

C'est pour ça qu'existe namespace
Met ton objet dans un namespace anonyme et voila :)
avec l'ex précédent :

Code :
  1. namespace
  2. {
  3.   class MonObjet
  4.   {
  5.     //...  
  6.   };
  7.   MonObjet mon_tit_objet_a_moi ; // local au fichier (comme avec static)
  8. }
  9. mon_tit_objet_a_moi = ...
  10. MonObjet mon_tit_objet_aussi_a_moi; // ici global


Message édité par Tarabiscote le 12-04-2005 à 11:27:16
n°1043937
Sve@r
Posté le 12-04-2005 à 11:31:49  profilanswer
 

LordHarryPotter a écrit :

Oulà qu'est ce que tu appelles objet de meme nom ???
 
C'est le nom de la variable qui est identiqueou "le type" :


C'est le type
 
En fait, j'ai un source "a.cpp" contenant le code suivant

class truc {
    public:
    void affich(void);
};
 
void truc::affich(void)
{
    printf("Hello de A\n" );
}
 
void Fa(void)
{
    truc elem;
    elem.affich();
}


 
Puis j'ai un source "b.cpp"

class truc {
    public:
    void affich(void);
};
 
void truc::affich(void)
{
    printf("Hello de B\n" );
}
 
void Fb(void)
{
    truc elem;
    elem.affich();
}


 
Puis le main dans un fichier "pgm.cpp" qui englobe tout ça

void Fa(void);
void Fb(void);
int main(void)
{
   Fa();
   Fb();
   return(0);
}


 
Compilation
g++ -c pgm.cpp =>ok
g++ -c a.cpp =>ok
g++ -c b.cpp =>ok
g++ a.o b.o pgm.o -o pgm => erreur => truc::affich() déjà défini
 
Donc, comme je l'ai dit, je pensais que la classe "truc" du fichier "a.cpp" n'était connue que dans le fichier "a.cpp" et n'entrerait pas en intéraction avec la classe "truc" du fichier "b.cpp".
Où me suis-je trompé ? Dois-je utiliser des classes de noms tous différents ?

n°1043939
Sve@r
Posté le 12-04-2005 à 11:33:17  profilanswer
 

Tarabiscote a écrit :

C'est pour ça qu'existe namespace
Met ton objet dans un namespace anonyme et voila :)
avec l'ex précédent :

Code :
  1. namespace
  2. {
  3.   class MonObjet
  4.   {
  5.     //...  
  6.   };
  7.   MonObjet mon_tit_objet_a_moi ; // local au fichier (comme avec static)
  8. }
  9. mon_tit_objet_a_moi = ...
  10. MonObjet mon_tit_objet_aussi_a_moi; // ici global



 
Ouah ! Je connaissais pas ! Merci

n°1043995
LordHarryP​otter
Posté le 12-04-2005 à 12:07:41  profilanswer
 

Sve@r a écrit :

C'est le type
 
En fait, j'ai un source "a.cpp" contenant le code suivant

class truc {
    public:
    void affich(void);
};
 
void truc::affich(void)
{
    printf("Hello de A\n" );
}
 
void Fa(void)
{
    truc elem;
    elem.affich();
}


 
Puis j'ai un source "b.cpp"

class truc {
    public:
    void affich(void);
};
 
void truc::affich(void)
{
    printf("Hello de B\n" );
}
 
void Fb(void)
{
    truc elem;
    elem.affich();
}


 
Puis le main dans un fichier "pgm.cpp" qui englobe tout ça

void Fa(void);
void Fb(void);
int main(void)
{
   Fa();
   Fb();
   return(0);
}


 
Compilation
g++ -c pgm.cpp =>ok
g++ -c a.cpp =>ok
g++ -c b.cpp =>ok
g++ a.o b.o pgm.o -o pgm => erreur => truc::affich() déjà défini
 
Donc, comme je l'ai dit, je pensais que la classe "truc" du fichier "a.cpp" n'était connue que dans le fichier "a.cpp" et n'entrerait pas en intéraction avec la classe "truc" du fichier "b.cpp".
Où me suis-je trompé ? Dois-je utiliser des classes de noms tous différents ?


 
 
Les namespaces permettent d'avoir (dans des namespcaces différents) des objets de meme noms.
Bon engénéral t'as çà dans desgros projets.
 
Sinon dans ton main tu mets "void Fa();" tu saisà quoi serve les fichier .h ???
Les fichiers .h serve à déclarer des fonctions qui vont être définis dans de fichiers .cpp et qui peuvent être utiliser ailleurs, typiquement ta classe truc et surtout les fonctions Fa et Fb.
 
Sinon rien ne t'empêche d'inclure un char* dans ton objet truc ain d'éviter de redéfinir l'objet truc (dans lesdeux cas t'initialise la chaine de caractères pour qu'elle soit égale à héllo A ou héllo B)

n°1044011
Sve@r
Posté le 12-04-2005 à 12:15:39  profilanswer
 

LordHarryPotter a écrit :

Les namespaces permettent d'avoir (dans des namespcaces différents) des objets de meme noms.
Bon engénéral t'as çà dans desgros projets.


Merci
 

LordHarryPotter a écrit :

Sinon dans ton main tu mets "void Fa();" tu saisà quoi serve les fichier .h ???
Les fichiers .h serve à déclarer des fonctions qui vont être définis dans de fichiers .cpp et qui peuvent être utiliser ailleurs, typiquement ta classe truc et surtout les fonctions Fa et Fb.


Vivi, j'ai été prof de C et je connais le principe du header :)
J'ai écris cet exemple simpliste pour résumer mon problème. En fait, dans les deux sources, l'objet "truc" n'est pas le même => chaque "truc" étant spécifique à chaque source il n'est pas à mettre dans un header
 

LordHarryPotter a écrit :

Sinon rien ne t'empêche d'inclure un char* dans ton objet truc ain d'éviter de redéfinir l'objet truc (dans lesdeux cas t'initialise la chaine de caractères pour qu'elle soit égale à héllo A ou héllo B)


Dans mon projet, mes objets de travail sont plus complexes. Et certains ne sont là que pour aider des fonctions précises à bosser => je vais tester le namespace


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Débutant C++ - Intéractions d'objets de même nom

 

Sujets relatifs
Svp aider un débutant en C ^^[JAVA] débutant & setvisible
debutant : Affichage variable dans url- problème d'accentsdebutant comment faire plusieurs Login et Pass
pb class [débutant]Isoler les bits d'un octets [Débutant inside]
SQL | Requete de débutant, mais je bug !!!héritage : ajouter et supprimer des objets
debutant: quel ide et version je jdk choisir?(débutant) enregistrer des données via un formulaire
Plus de sujets relatifs à : Débutant C++ - Intéractions d'objets de même nom


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR