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 :

Erreur de compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut Erreur de compilation
    Bonjour j'ai une petite question sur une erreur que je n'arrive pas à comprendre.
    Pour info je débute l'étude de la POO avec C++.
    Pour m'entrainer j'essay d'encapsuler une partie de SDL .
    voici mon code:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #ifndef FENETRE_H_
    #define FENETRE_H_
     
    //encapsulation de SDL
     
    class Fenetre 
    {
    public:
     
    	Fenetre();
    	Fenetre(int,int,int);
     
            ~Fenetre();
     
       // fonction membre d'affectation (INLINE).
     
       void definirlongueur(int longueur) {wlongueur(longueur);}  
       void definirlargeur(int largeur)   {wlargeur(largeur);}
       void definirBitCouleur(int bit)    {wbit(bit);}
     
       //fonction d'acces des données membres (INLINE).
     
       int  lirelongueur()const    {return wlongueur;}
       int  lirelargeur() const    {return wlargeur;}
       int  lirenbrbit()  const    {return wbit;} 
       void tracerfenetre();
     
    private:
    	int wlongueur, wlargeur , wbit;
    	SDL_Surface *pfenetre;
    };
     
     
    Fenetre::Fenetre()
    {
    wlongueur(800);
    wlargeur(600);
    wbit(32);
    }
     
    Fenetre::Fenetre(int longueur,int largeur ,int bit)
    {
    wlongueur(longueur);
    wlargeur(largeur);
    wbit(bit);
    }
     
    Fenetre::~Fenetre()
    {
    	delete pfenetre;
    	pfenetre = NULL;
    }
     
    void Fenetre::tracerfenetre()
    {
    	pfenetre = new SDL_Surface;      //allocation memoire.
    	pfenetre = SDL_SetVideo(wlongueur,wlargeur,wbit,SDL_HWSURFACE);
    	SDL_Flip(pfenetre);
    }
     
    #endif /*FENETREH_*/
    Seulement lors de la compilation j'ai l'erreur suivante :

    Fenetre_principale.h: In member function ‘void Fenetre::definirlargeur(int)’:
    Fenetre_principale.h:18: erreur: ‘((Fenetre*)this)->Fenetre::wlargeur’ cannot be used as a function

    Est ce que quelqu'un pourait m'aider à comprendre.
    Ainsi que de juger mon premier fichier .h afin de savoir si je suis sur la bonne voie.
    Merci par avence.


    balises [code] rajoutées par r0d, merci d'y penser dorénavant

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Je crois que tu confonds 2 choses:

    1) La liste d'initialisation du constructeur.
    Par exemple, une implémentation de ta class Fenetre pourrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fenetre::Fenetre(int len, int hi, int bit)
    : wlongueur(len), wlargeur(hi), wbit(bit)  // <-- ceci est la liste d'initialisation
    {}
    Dans ce cas, wlongueur(len) est équivalent à wlongueur = len.
    Mais on ne peut faire cela que pour un constructeur.

    2) Une affectation "classique":
    Dans toute fonction autre qu'un constructeur, pour affecter une variable à une valeur, il faut utiliser l'opérateur '='.

    Donc, ta fonction definirlongueur devra être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void definirlongueur(int longueur) {wlongueur = longueur;}

    Hope it helps.

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut
    Ok Merci de m'avoir éclairé,

    Apprendre le c++ en autodidact ce n'est pas simple mais passionant.
    Sans vouloir abuser qu'elle difference y à t'il entre ces definitions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fenetre::Fenetre(int longueur,int largeur ,int bit)
    wlongueur=longueur;
    wlargeur=largeur;
    wbit=bit;
    {
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fenetre::Fenetre(int longueur,int largeur ,int bit
    {
    wlongueur=longueur;
    wlargeur=largeur;
    wbit=bit;
    }
    Celon ce que j'ai pu apprendre ce serait la premiere solution la + adaptée.
    deplus maintenant appres modification il me reste encore une erreur que je ne comprend pas trés bien:

    Fenetre_principale.h:35: erreur: expected initializer before ‘wlongueur’

    Faut il utiliser les parentheses dans la definition du constructeur?
    Et encore merci

  4. #4
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    aucune ne vas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Fenetre::Fenetre(int longueur,int largeur ,int bit)
    {
         wlongueur=longueur;
         wlargeur=largeur;
         wbit=bit;
    }
    voila qui est deja mieu ! va du coté des tuto sur le site tu y apprendra beaucoup de chose !

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut
    PS OK pour la parenthese c'est une faute de frappe,

    sinon pourquoi aucune des deux???

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut
    OK Merci de votre aide.
    et @+

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par lolotte
    Apprendre le c++ en autodidact ce n'est pas simple mais passionant.
    D'autant plus que le c++ est un des langage le plus riche et le plus complexe.
    Je ne saurais jamais trop te conseiller de bien assimiler les bases avant de partir dans du dev "pur et dur". S'acheter un bon bouquin, ou en trouver un en ligne, est la meilleure façon pour le faire (cf. la section livres du site).

    Quoi qu'il en soit,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fenetre::Fenetre(int longueur,int largeur ,int bit)
    wlongueur=longueur;
    wlargeur=largeur;
    wbit=bit;
    {
    }
    est une code syntaxiquement incorrect. La bonne syntaxe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // constructeur utilisant une liste d'initilialisation
    Fenetre::Fenetre(int longueur,int largeur ,int bit)
    : wlongueur(longueur)
    , wlargeur(largeur)
    , wbit(bit)
    {
    }
    Et la différence entre le code précédent et le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // constructeur utilisant des affectations
    Fenetre::Fenetre(int longueur,int largeur ,int bit)
    {
    wlongueur=longueur;
    wlargeur=largeur;
    wbit=bit;
    }
    est trés bien expliquée ici

    Tu trouveras également beaucoup d'informations concernant les constructeurs sur la faq de developpez.com (cf. ma signature )

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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