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 :

Question Sur l'Opérateur d'affichage C++ <<


Sujet :

C++

  1. #21
    Invité
    Invité(e)
    Par défaut
    Ton problème vient du fait que tu appelles récursivement la méthode Navire::distance infiniment, tu fais donc "exploser" la pile des appels.

    Pourquoi ne pas passer un seul argument et calculer la distance avec l'instance this ? Le compilateur n'aura alors aucun problème à savoir lequel appeler. Sinon il n'existe pas d'autre solution que de rajouter ::

  2. #22
    Membre habitué Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Points : 163
    Points
    163
    Par défaut
    @Iradrille:
    J'ai pensé à faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    namespace myns {
         double distance(const Coordonnees &, const Coordonnees&) {...}
         double distance(const Navire&, const Navire& {...}
    }
     
    double Navire::distance(const Navire& other)
    {
         return myns::distance(...);
    }
    mais dans le main(), j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << "Distance : " << distance(ship1, ship2) << endl;
    recommandé par l'exercice.. ;(

    Je vais voir avec votre proposition de renommer les méthodes ..
    La science ne connaît qu'une loi: la contribution scientifique.

  3. #23
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace myns {
         double distance(const Coordonnees &, const Coordonnees&) {...}
         double distance(const Navire&, const Navire& {...}
    }
     
    myns::distance(...);
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double distance(const Coordonnees &, const Coordonnees&) {...}
    double distance(const Navire&, const Navire& {...}
     
    ::distance(...);
    C'est strictement la même chose, dans un cas, tes fonctions sont dans un namespace myns, dans l'autre dans le namespace global.
    Dans les deux cas tu utilises des "::", et dans les deux cas ce n'est pas dérangeant (et même obligatoire). En quoi ces "::" te dérangent exactement ?

  4. #24
    Membre habitué Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Points : 163
    Points
    163
    Par défaut
    Voici l'erreur que m'a générée les ::
    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
    *** Exécution arrêtée : exception de type Exception :
    Compilation échouée
    ====== Sortie de g++ (1): ======
    In file included from /tmp/tmprck_fu/test.cc:153:0:
    /tmp/tmprck_fu/student.cc: In member function ‘double h8f38ea9190dd6f1c464fbf7a78f3979b::Navire::distance(const h8f38ea9190dd6f1c464fbf7a78f3979b::Navire&, const h8f38ea9190dd6f1c464fbf7a78f3979b::Navire&)’:
    /tmp/tmprck_fu/student.cc:227:10: error: ‘::distance’ has not been declared
       return ::distance(n1, n2);
              ^
    compilation terminated due to -Wfatal-errors.
     
    ====== Sortie de clang++ (1): ======
    In file included from /tmp/tmprck_fu/test.cc:153:
    /tmp/tmprck_fu/student.cc:227:12: fatal error: no member named 'distance' in the global namespace
      return ::distance(n1, n2);
             ~~^
    1 error generated.
    La science ne connaît qu'une loi: la contribution scientifique.

  5. #25
    Membre habitué Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Points : 163
    Points
    163
    Par défaut
    J'ai renommé la méthode et ça marche..
    Merci bien pour toutes vos réponses
    La science ne connaît qu'une loi: la contribution scientifique.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Question sur la zone d'affichage sur l'écran
    Par Bundy*Al dans le forum OpenGL
    Réponses: 1
    Dernier message: 30/05/2008, 22h59
  2. Question sur l'opérateur ::
    Par johnkro dans le forum Langage
    Réponses: 8
    Dernier message: 14/03/2008, 10h13
  3. Questions sur l'opérateur <<
    Par coyotte507 dans le forum C++
    Réponses: 4
    Dernier message: 18/11/2007, 22h54
  4. Question sur les listes d'affichage
    Par brouss dans le forum OpenGL
    Réponses: 3
    Dernier message: 08/03/2007, 12h56
  5. question sur les opérateurs
    Par isidore dans le forum C++
    Réponses: 10
    Dernier message: 25/02/2005, 18h46

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