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 :

Problème avec un objet déclaré en globale


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut Problème avec un objet déclaré en globale
    Bonjour à vous !

    Je travaille depuis plus d'une semaine sur une classe en C++. J'ai un programme qui la teste. Pour me simplifier la vie, j'ai déclaré une instance de cette classe tout en haut du fichier, pour qu'elle soit accessible partout.

    Je modifie mon programme de test pour pouvoir changer les paramètres de mon constructeur de classe en fonction des arguments (argc, argv).

    Or, je viens de réaliser que dans mes autres fonctions, c'est toujours les anciennes valeurs des attributs qui sont conservées, et non pas celles après avoir rappelé le constructeur !

    Lors de la déclaration tout en haut, je n'utilise pas de pointeur donc ça appelle un constructeur par défaut.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    maClasse obj(1);
     
    void fonction() {
    	int a = obj.getMachin(); // a est égal à 1 !
    }
     
    void main(...) {
    	obj(argc); // par exemple, supposons que argc est différent de 1
    	int a = obj.getMachin(); // a est bien égal à argc
    	fonction();
    }
    J'ai essayé de mettre static devant, ça n'a rien changé... Je n'ai pourtant pas le même problème avec toutes les autres données que j'utilise mais ce ne sont pas des objets à proprement parler !

    Est-ce spécifique aux instances de classes ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu ne peux initialiser une variable ailleurs qu'à sa déclaration, sinon ce n'est plus une initialisation.
    Ça ne se voit pas beaucoup pour les types simples, mais ça se voit bien pour les classes, car le constructeur d'une classe n'est appelé qu'une fois pour une instance donnée.
    Tu ne peux donc initialiser un objet globale dans une fonction, fusse-t-elle main().

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut
    Donc si j'ai bien, compris, il vaut mieux que j'utilise partout un pointeur déclaré en globale, et dont j'instancierai la cible dans mon main ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Par exemple.

    Ou bien, définir une méthode dans ta classe pour réinitialiser l'objet, et appeler cette méthode dans le main... (ce qui n'est pas possible si l'objet ou certains de ses membres sont constants).

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut
    C'était idiot de ma part... Ca c'est à force de faire du java et du C# où l'on manipule toujours des références que l'on peut réinitialiser à loisir en oubliant qu'il s'agit bien de pointeurs (en quelque sorte) ...

    J'utilise un pointeur maintenant et cela fonctionne bien. J'ai juste eu à changer tous les "." par des "->" dans mon programme mais c'est allé assez vite.

    Merci !

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

Discussions similaires

  1. [COM] Problème avec l'objet COM
    Par Commodore dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/05/2006, 20h36
  2. [Delta3d] probléme avec un objet dans une map
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 27/03/2006, 14h49
  3. Problème avec l'Objet "Session"
    Par ghislain007 dans le forum ASP
    Réponses: 4
    Dernier message: 03/03/2006, 22h07
  4. Problème avec l'objet FileSystemObject
    Par Poussy-Puce dans le forum ASP
    Réponses: 4
    Dernier message: 27/10/2005, 16h25
  5. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44

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