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 :

surcharge d'une fonction par une methode


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut surcharge d'une fonction par une methode
    Bonjour à tous,

    Malgré mes recherches, je n'ai pas trouvé la solution précise à mon problème. J'ai bien trouvé quelques pistes s'en rapprochant, mais je ne les ai pas très bien comprises.

    Mon but est d'implémenter une méthode random "static int random(int)", privée, à l'intèrieur de ma classe "MyObject". Cette méthode utilise la fonction random "long random()" de la librairie standard.

    voila le code:

    MyObject.h

    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
    17
     
    #ifndef MYOBJECT_H_
    #define MYOBJECT_H_
     
    class MyObject
    {
     private:
      int   _id;
     
     public:
      MyObject();
     
     private:
      static int    random(int);
    };
     
    #endif  // MYOBJECT_H_
    MyObject.cpp


    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
     
    #include <stdlib.h>
    #include "MyObject.h"
     
    MyObject::MyObject()
    {
      // appel de la methode MyObject::random
      _id = random(42);
    }
     
    int     MyObject::random(int max)
    {
      // appel de la fonction random de la lib standard
      return ((int)(random() % max));
    }
    main.cpp (sait-on jamais :p)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "MyObject.h"
     
    int             main(void)
    {
      MyObject      foo();
      return (0);
    }
    Qui me donne le message d'erreur suivant à la compil' :

    > In static member function `static int MyObject::random(int)':
    > error: no matching function for call to `MyObject::random()'
    > note: candidates are: static int MyObject::random(int)


    Je n'ai pas trouvé la manière de dire que la fonction qui doit être appelée, est celle de la librairie standard et non la méthode. La signature de la fonction ne suffisant apparement pas.

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bonjour, la fonction random de la lib standart n'est-elle pas plutôt rand() ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par omc24 Voir le message
    Bonjour, la fonction random de la lib standart n'est-elle pas plutôt rand() ?
    Je ne crois pas, mais je me trompe peut être. Toujours est-t-il que je veux bien utiliser la fonction random() -> (cf man 3 random).

  4. #4
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Avec un #include <cstdlib> ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par seeme Voir le message
    Avec un #include <cstdlib> ?
    Toujours pas, même problème. Dommage.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Heu... Je persiste...
    Mieux vaut utiliser rand(), qui est le "portage" C++ de random() de la libc.

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Il faut probablement lever l'ambigüité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int MyObject::random(int max)
    {
      // appel de la fonction random de la lib standard
      return ((int)(::random() % max));
    }
    :: permet d'indiquer au compilateur qu'il doit chercher random() dans le namespace global.

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. [Debutant] changer des images dans une div par une fonction javascript
    Par raul_le_vieux dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/06/2007, 09h35
  3. Réponses: 13
    Dernier message: 09/04/2007, 13h20
  4. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 14h24
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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