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 de fonctions


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut Problème de fonctions
    Bonjour tout le monde
    Voilà j'ai en problème ^^ Enfait dans l'implémentation d'une fonction j'ai besoin de faire apel à la fonction d'une autre classe comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Personnage::afficher()
    {
    	Surface_Perso = SDL_LoadBMP("bonomme.bmp");
    	SDL_BlitSurface(Surface_Perso, NULL, "?", &position);
     
    }
    Ici, le point ? doit être remplacé par "Surface de l'écran" dont la variable se trouve dans ma classe Terrain.
    J'ai également créer une fonction pour récupérer cette variable mais enfait je ne vois pas comment l'utiliser ici parsque je n'ai encore défini aucun constructeur.
    Si quelqu'un à une idée

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Salut,

    Je ne comprends pas trop ce que tu veux dire par "je n'ai pas encore défini de constructeur".

    Si ta fonction pour récupérer la taille de l'écran est non statique, il te faudra une référence ou un pointeur vers une instance de la classe contenant cette variable dans ta classe Personnage (ou alors une méthode pour récupérer une instance unique de cette classe).

    Ou alors tu passes la fonction et la variable à récupérer en static, comme ça tu n'as pas besoin d'instances pour les utiliser.

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Combien de fois il faudra le dire.
    On charge ses images dans le constrcuteur , on les libèrent dans le destructeur et on s'en sert dans les fonctions.
    MAIS ON LES CHARGENT PAS DANS LES FONCTIONS MEMBRES !! (je suis énervé)
    Tu imagine si tu charge 25 fois par seconde ton image ?

    PS: si tu veut un bon truc en C++ , prend la SFML , pas la SDL.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut
    Déjà, tu charge l'image à chaque fois que tu veux afficher ton perso, c'est assez lourd, et en plus tu ne la décharge pas. Au bout de quelques minutes tu va saturer ta mémoire...

    Secundo, mieux vaut faire une classe qui gère le graphique, et donc qui contiendra le SDL_Surface de l'écran, et qui se chargera de récupérer la liste des objets à afficher, et qui les affichera.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    --'

    Merci pour vos réponses.
    Je n'utilise ma fonction afficher() qu'une seul fois dans la main.cpp après j'utilise directement la commande SDL_BlitSurface pour réaficher mon image devrai donc se bliter qu'une seule fois ?
    Oui je pense pas souvent à décharger ou à faire des destructeurs si mon programme grandis ça risque de pas trop passer.
    Mais sinon j'ai réussi à résoudre mon problème en faisant hériter de ma class Personnage à ma class Terrain de tels sortes que Personnage contiennent les attributs de Terrain.
    Cependant cela pose tout de même un problème, en utilisant les attributs de Terrain dans mes methodes de Personnage, mon programme me dit que je ne suis pas autorisé à les utiliser.
    L'erreur se met pendant que le programme est en cours :
    "Violation d'accès lors de la lecture"

    Il n'y a aparrement aucune erreur dans le code..

    Merci d'avance

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    L'héritage est la relation la plus forte entre deux objets !
    Il me semble complétement hallucinant de pouvoir dire que tout 'Personnage' est un 'Terrain'.
    Si j'ai 40 personnages, j'ai donc 40 terrains ?

    Ou alors le nom de tes classes n'est pas bon.... Personnage devrait hériter, par exemple de "ObjetDeTerrain" qui pointe sur un Terrain.
    Et Terrain peut contenir une liste d'ObjetDeTerrain à afficher....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Oui j'avou que c'est pas trop logique mais c'étais surtout pour avoir accès aux attributs. ^^
    Je viens de rectifier ça en créant une classe "ObjetTerrain" comme class mère et "Personnage" et "Terrain" comme class fille.
    Mais là je comprends vraiment pas, je me retrouve avec une centaines d'erreur Enfait, ça me reconnait pas l'héritage, et donc tout mes atributs que j'ai stocké dans "ObjetTerrain", de tel sorte qu'ils soient accessibles à toute mes class, ne sont pas reconues dans aucune de mes 2 classes..
    D'après les Cours C++ et la FAQ C++ du site je ne vois pas d'erreur dans mon code mais qui sait ^^

    Donc voilà le code de mes 3 headers :
    "ObjetTerrain.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #ifndef ObjetTerrain
    #define ObjetTerrain 
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include "Personnage.h"
    #include <SDL/SDL_image.h>
    #include <FMOD/FMOD.h>
    #include <iostream>
    #include <string>
    #include "Terrain.h"
    #include "main.h"
     
    class ObjetTerrain
    {
     
    protected :
    	//Attributs de terrain
       int tailleH;
    	 int tailleL;
    	 int couleurA;
    	 int couleurB;
    	int couleurC;
      SDL_Surface *surface;
     
      //Attributs de Personnage
    	std::string image;
        SDL_Rect position;
        SDL_Surface *S_Perso;
     
    };
     
    #endif
    "Terrain.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #ifndef Terrain 
    #define Terrain 
     
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <FMOD/FMOD.h>
    #include <iostream>
    #include <string>
    #include "ObjetTerrain.h"
     
    class Terrain : public ObjetTerrain
    {
        public:
    		Terrain(); //Constructeur
    		void creation();
    		void refresh();
    	    SDL_Surface* getSurface();
    		int getColorA() const;
    		int getColorB() const;
    		int getColorC() const;
     
    };
     
    #endif
    "Personnage.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #ifndef Personnage
    #define Personnage
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <FMOD/FMOD.h>
    #include <iostream>
    #include <string>
    #include "Terrain.h"
    #include "ObjetTerrain.h"
     
    class Personnage : public ObjetTerrain
    {
        public:
    		Personnage(); //Constructeur
    		void afficher();
    		void bouger();
    		void click();
    	    SDL_Surface* getSurfacique();
    		int getPositionX();
    		int getPositionY();
    		SDL_Rect getPosition() const;
     
     
     
    };
     
    #endif
    Voilà si quelqu'un a la patience de lire et si quelqu'un trouve donc une erreur

    Merci d'avance.

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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