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 :

Appel d'une fonction A depuis une fonction B.


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut Appel d'une fonction A depuis une fonction B.
    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
     
    int MaClasse::ajouterTexture(const char* nomTexture)
    {
        SDL_Surface* temp = SDL_LoadBMP(nomTexture);
        if (temp)
        {
            textures.push_back (temp);
            return 0;
        }
        else
        {
            cerr << "Impossible de charger \"" << nomTexture << "\". \n";
            return -1;
        }
    }
    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
    int MaClasse::ajouterTextures(const char* nomFichier)
    {
        string texture; int nbErreurs = 0;
        ifstream file(nomFichier);
    
        if (!file)
            cerr << "Impossible de charger \"" << nomFichier << "\". \n";
    
         while (getline( file, texture ))
         {
             if (ajouterTexture(texture))
                nbErreurs++;
         }
        return nbErreurs;
    }
    ajouterTexture(texture) pose problème.
    Les 2 fonctions membres sont dans la même classe mais je n'arrive pas à appeller ajouterTexture depuis ajouterTextures.

    En gros, ajouterTextures lit un .txt qui rassemble tous les chemins des fichiers à charger (les textures dans mon cas), à chaque ligne il appelle ajouterTexture qui tente de charger (grâce au moteur SDL) un .bmp dont le nom est passé en parametre.
    Il me semble qu'il faut utiliser le pointeur this à moins qu'il y ait une autre voie ?

    Merci d'avance de bien vouloir m'éclairer.

  2. #2
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Points : 56
    Points
    56
    Par défaut
    et en faisant :

    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
     
    int MaClasse::ajouterTextures(const char* nomFichier)
    {
        string texture; int nbErreurs = 0;
        ifstream file(nomFichier);
     
        if (!file)
            cerr << "Impossible de charger \"" << nomFichier << "\". \n";
     
         while (getline( file, texture ))
         {
             if (MaClasse::ajouterTexture(texture))
                nbErreurs++;
         }
        return nbErreurs;
    }
    ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    'lut

    texture est un string, peut-etre faut il le caster en char* avant !

    Si c'est pas çà, fait voir le message d'erreur stp.

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par _yeye_
    'lut

    texture est un string, peut-etre faut il le caster en char* avant !

    Si c'est pas çà, fait voir le message d'erreur stp.
    ou

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Points : 56
    Points
    56
    Par défaut
    Mouarf ct ca le probleme ??? comme quoi des fois le message d'erreur peut etre utile car j'avais pas compris ca du tout

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par ZeRiL
    Mouarf ct ca le probleme ??? comme quoi des fois le message d'erreur peut etre utile car j'avais pas compris ca du tout
    Le message d'erreur est en général très utile !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    @Zeril: Non dans ce bloc de programme (ajouterTextures) il ne connait pas la fonction ajouterTexture, même en ajoutant MaClasse::

    Euh ce n'est pas un problème de cast, apparemment il cast automatiquement, l'erreur vient du fait que la fonction ajouterTexture n'est pas "visible" donc "appellable" depuis ajouterTextures.


    Les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    H:\Programmation\MaClasse.hpp:62: error: no matching function for call to `MaClasse::ajouterTexture(std::string&)'
    H:\Programmation\MaClasse.hpp:37: note: candidates are: int MaClasse::ajouterTexture(const char*)
    :: === Build finished: 2 errors, 0 warnings ===

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Bon ça a l'air de marcher avec

    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
    18
    19
     
    int GestionnairedeTextures::ajouterTextures(const char* nomFichier)
    {
        string texture;
        const char* test;
        int nbErreurs = 0;
        ifstream file(nomFichier);
     
        if (!file)
            cerr << "Impossible de charger \"" << nomFichier << "\". \n";
     
         while (getline( file, texture ))
         {
             test = texture.c_str();
             if (GestionnairedeTextures::ajouterTexture(test))
                nbErreurs++;
         }
        return nbErreurs;
    }
    Jtrouve ça un peu tordu mais bon... si quelqun a une autre idée je suis preneur

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pourquoi tordu ? Ton problème vient du fait qu'il faut convertir ton std::string en const char*, ce que tu fais avec texture.c_str(). D'ailleurs GestionnairedeTextures:: devant l'appel de fonction est inutile, il n'y a aucun problème de visibilité.

    Et je te conseillerais même de passer texture.c_str() directement, sans passer par un temporaire.

  10. #10
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par LeFlou
    Bon ça a l'air de marcher avec

    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
    18
    19
     
    int GestionnairedeTextures::ajouterTextures(const char* nomFichier)
    {
        string texture;
        const char* test;
        int nbErreurs = 0;
        ifstream file(nomFichier);
     
        if (!file)
            cerr << "Impossible de charger \"" << nomFichier << "\". \n";
     
         while (getline( file, texture ))
         {
             test = texture.c_str();
             if (GestionnairedeTextures::ajouterTexture(test))
                nbErreurs++;
         }
        return nbErreurs;
    }
    Jtrouve ça un peu tordu mais bon... si quelqun a une autre idée je suis preneur
    C'est pas tordu du tout...
    Les string et char * c'est pas pareil du tout!

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

Discussions similaires

  1. Appeler une procédure stockée depuis une fonction
    Par FMJ dans le forum Développement
    Réponses: 4
    Dernier message: 07/04/2009, 22h04
  2. Réponses: 2
    Dernier message: 15/05/2008, 11h45
  3. [WebForms]Comment appeler une fonction ASP depuis une JavaScript ?
    Par flagadda dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 11/08/2006, 15h24
  4. [VBA-E] Appel de fonction/procédure depuis une variable
    Par truman dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/05/2006, 17h20
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24

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