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 une classe... "without object"


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut Problème avec une classe... "without object"
    Bonjour à tous,

    je suis en train de travailler sur mon projet, et je n'ai pour l'instant fait aucune classe... J'ai donc décidé d'en faire une, mais n'étant pas chez moi, je n'ai pas les infos nécessaires...

    Voici ma classe, dans un fichier .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
    35
    36
    37
    38
    39
    40
          #ifndef prendre_photo_h
    #define prendre_photo_h
    
    #include "creer_ville.h"
    extern pt_ville VILLES;
    
    class photo{
    bool entrepot;
    bool centrale;
    bool cyber;
    public:
    //photo(entrepot=false, centrale=false,cyber=false);
    
    void photo::prendre(string nom_vil) {
    	while(VILLES) {
    		if(VILLES->nom_ville == nom_vil) {
    			if(VILLES->entrepot == true) this->entrepot = true; 
    			else this->entrepot = false;
    
    			if(VILLES->centrale == true) this->centrale = true; 
    			else this->centrale = false;
    			
    			if(VILLES->cyber == true) this->cyber = true; 
    			else this->cyber = false;
    		}
    	VILLES = VILLES->lien;
    	}
    }
    
    void photo::afficher_photo(string nom_vil) {
    	cout << "ici"<< endl;
    	this->prendre(nom_vil); //Si on ne l'a fait pas avant, on va chercher les infos maintenant.
    	cout << "La ville " << nom_vil ;
    	if(entrepot) cout << " comporte un entrepot,"; 
    	else cout << " ne comporte pas d'entrepot,";
    
    	if(centrale) cout << " comporte une centrale,"; 
    	else cout << " pas de centrale,";
    
    	if(cyber) cout << " et comporte un centre cybern
    Dans un fichier .cpp (ou j'ai inclus le .h), je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    photo::afficher_photo(nom_vil);
    lors de la compil, j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    g++ -Wall   -c -o lancement_partie.o lancement_partie.cpp
    lancement_partie.cpp: Dans function « void lancement_partie() »:
    lancement_partie.cpp:40: error: cannot call member function `void
       photo::afficher_photo(const std::string&)' without object
    make: *** [lancement_partie.o] Erreur 1
    Comment corriger ce pb??

    Merci !

    Philippe

  2. #2
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    tu n'utilise pas une instance de ta classe, en gros quan tu utilise la notation :: tu demande a lancer une fonction.

    la difference avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    photo->afficher_photo(nom_vil);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    photo.afficher_photo(nom_vil);
    est que ta fonction ne doit pas utiliser this (aucune de ses variables memebres n'est initiamisée)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    On n'a le droit d'appeler que des fonctions statiques avec cette méthode.

    Pour plus de renseignements : http://c.developpez.com/faq/cpp/

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    hansaplast merci de ta réponse, mais je ne crois pas que ce soit, j'ai toujours appris avec les ::

    Pour Miles, euh... Si on est pas autorisé à faire ca, alors comment faire,??

    Merci

    Philippe

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par z980x
    hansaplast merci de ta réponse, mais je ne crois pas que ce soit, j'ai toujours appris avec les ::
    Moi, je te garantis que hansaplast a raison. Peut-être envisager de changer de prof ?

    1 - A l'intérieur d'une définition de classe, le nom de la classe est implicite en tant qu'espace de nommage. Il est donc inutile de le redéclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Photo {
       void prendre(string nom_vil) { [...] }
    };
    2 - Quand tu définis une classe, tu définis des méthodes "normales", qui sont appelées en passant par une instance de la classe, ou (inclusif) des méthodes statiques, qui n'ont pas besoin d'une instance de la classe pour être appelées.
    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
    class Photo {
      public : 
       void prendre(string nom_vil) { [...] }
       static void prendre_statique (string nom_vil) { [...] }
       void test();
    };
     
    void fct() {
      Photo ph;
      ph.prendre( "depuis une instance" );
      Photo* pph = new Photo();
      pph->prendre( "depuis un pointeur initialisé" );
      photo::prendre_statique( "depuis rien du tout" );
    }
     
    void Photo::test() {
      prendre( "de l'intérieur de la classe" );
      prendre_statique( "toujours à l'intéreur de la classe" );
      Photo::prendre_statique( "pour les bavards ou les amateurs de précision" );
    }
    Par défaut, une méthode est non statique.

  6. #6
    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
    Tu devrais relire un bon cours de C++, c'est quand même la base.

    En gros si tu définis une classe c'est pour ensuite en déclarer des instances, tu ne peux pas appeler une fonction membre sans instance, à moins que celle-ci soit déclarée statique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class photo
    {
        ...
    };
     
    // Je définis une instance de la classe photo
    photo p;
     
    // J'appelle sa fonction membre afficher_photo
    p.afficher_photo(nom_vil);

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Ah voila ! J'avais oublié... Merci !

  8. #8
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    oublie aps le tag "resolut"

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par z980x
    hansaplast merci de ta réponse, mais je ne crois pas que ce soit, j'ai toujours appris avec les ::

    Pour Miles, euh... Si on est pas autorisé à faire ca, alors comment faire,??

    Merci

    Philippe
    http://www.developpez.net/forums/sho...03&postcount=3
    Juste au-dessus....................

Discussions similaires

  1. Problème avec une classe
    Par kanabzh29 dans le forum Langage
    Réponses: 14
    Dernier message: 31/10/2008, 06h41
  2. problème avec une classe générique
    Par bard123 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 11h09
  3. [POO] Problème avec une classe + requêtes sql
    Par mithrendil dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2007, 08h27
  4. Problème avec une classe générique
    Par Core8 dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2007, 03h18
  5. Problème avec une classe ActionScript
    Par Patryk403 dans le forum Flash
    Réponses: 3
    Dernier message: 06/08/2006, 12h42

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