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 d' héritage


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Problème d' héritage
    Bonjour à tous,

    je viens à vous car je ne trouve pas de solution à mon problème même après avoir fouiller sur internet.
    La chose est pourtant simple, j'ai une classe qui hérite d'une autre classe et à la compilation j'ai une erreur : "expected class-name before '{' token" sur la ligne "class nom_de_ma_classe : public classe_mère" de la classe en question.

    Voici les headers de mes deux classes :

    La classe mère
    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
    #ifndef I2CDEVICE_H_
    #define I2CDEVICE_H_
     
    #include <WProgram.h>
    #include <MyLib.h>
    #include <HardWire.h>
     
    class I2C_Device {
    public:
    	I2C_Device();
    	~I2C_Device();
     
    	bool 	I2CInit(HardWire* newWire, uint8_t I2C_Port = 1, uint8_t I2C_Flags = 0);
    	void 	WriteReg(uint8_t address, uint8_t reg, uint8_t value);
    	uint8_t ReadReg(uint8_t address, uint8_t reg);
    	void	BurstWrite(uint8_t address, uint8_t first_reg, uint8_t nbytes, uint8_t *buff);
    	void	BurstRead(uint8_t address, uint8_t first_reg, uint8_t nbytes, uint8_t *buff);
     
    private:
    	HardWire* 	wire;
    	bool		I2CInitiated;
    };
     
    #endif /* I2CDEVICE_H_ */
    et la classe fille :
    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
    #ifndef IMU10DOF_H_
    #define IMU10DOF_H_
     
    #include <WProgram.h>
    #include <MyLib.h>
    #include <I2CDevice.h>
     
    class IMU10DOF : public I2C_Device {
    public:
    	IMU10DOF();
    	~IMU10DOF();
     
    	void Init(uint8 I2CPort, uint8 flags);
    	void Deinit();
     
    	void Update();
     
    	void GetAcc(axes* acc);
    	void AccAttachInterrupt(uint8_t int1, uint8_t int2);
    	void AccDetachInterrupt();
    	void UpdateAcc();
     
    	void GetGyro(axes* gyro);
    	void SetGyroScale(uint16_t scale);
     
    private:
     
    	uint8_t		intPinAcc1, intPinAcc2;
    	bool		intActive;
    	bool		newAccData;
     
    	axes gyro_data, acc_data, calib;
     
    };
     
    // quelques #defines
     
    #endif /* IMU3000_H_ */
    J'ai vérifié, ni WProgram.h ni MyLib.h ni HardWire.h n'incluent I2CDevice.h.

    J'avoue que je suis un peu perdu et que j'aurais bien besoin d'un peu d'aide.

    Merci d'avance

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Après avoir passé une heure à chercher, faut que je trouve la solution tout seul 5min après avoir poster sur un forum... Ce thread peut être supprimé je pense. La solution a été de ne plus include MyLib.h dans la classe mère car il contenait une inclusion de la classe fille

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Pourquoi le destructeur d'une classe de base doit être public et virtuel ou protégé et non virtuel ?

    Un héritage et pas une seule fonction virtuelle, cela me laisse plutôt suspecter une besoin de composition plutôt que d'héritage. Pourquoi mettre en œuvre un héritage ?

    Sur les getter/setter, cf les liens dans la réponse de Luc ici

    Sur les fonctions init/deinit : Quelles sont les différences fondamentales entre le constructeur d'une classe et sa méthode Init() ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Il n'y a pas de notion d'implication entre héritage public et
    polymorphisme.

    "Est-un" n'a pas la même sémantique que "est composé de".

    Si pour faire une classe VeloDeJacky, tu veux rajouter une queue de raton-laveur et une sirène qui hullule, ça a plus de sens d'hériter d'un vélo normal que de faire une composition. Car un VeloDeJacky est un vélo, et n'est pas composé d'un vélo.

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

Discussions similaires

  1. [C#] Problème d'héritage, aide svp :(
    Par choas dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/05/2006, 11h46
  2. problème constructeur + héritage
    Par BOLARD dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 08h11
  3. [AS2] Problème d'héritage
    Par wwave dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/01/2006, 09h26
  4. Problème d'héritage ?
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2005, 17h18
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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