Classe ?

Fermé
Belialis - Modifié par pijaku le 31/03/2014 à 13:08
Viking57 Messages postés 68 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 28 juillet 2014 - 2 avril 2014 à 10:12
Bonjour, Petit probleme non résolu dans mon projet, je suis débutant j'ai essayé quelque chose je me retrouve coincé !
Erreur :
chargeur.cpp:14:14: error: '((Chargeur*)this)->Chargeur::MonRelais' does not have class type

Main :
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include "chargeur.h"
using namespace std;

int main(int argc, char* argv[])
{
  Chargeur Macharge;
  Macharge.demarrer_charge();
  Macharge.arreter_charge();
  return 0;
}


Chargeur.cpp
#include "chargeur.h"
#include "relais.h"
#include <iostream>
using namespace std;

Chargeur::Chargeur()
{
  
}

void Chargeur::demarrer_charge()
{
    cout << "Demarrage de la charge" << endl;
    MonRelais.ouvrir();
}

void Chargeur::arreter_charge()
{
    cout << "Arret de la charge" << endl;
}

Chargeur::~Chargeur()
{
  
}


chargeur.h
#ifndef DEF_CHARGEUR
#define DEF_CHARGEUR
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include "relais.h"

class Chargeur
{
    public:
   Chargeur();
   ~Chargeur();
   void demarrer_charge();
   void arreter_charge();
    private:
      Relais MonRelais();
};

#endif


relais.cpp
#include <iostream>
#include "relais.h"
using namespace std;
Relais::Relais()
{
  
}

void Relais::ouvrir()
{
    cout << "Avec un relais ouvert" << endl;
}

void Relais::fermer()
{
    cout << "Sans relais ouvert" << endl;
}

Relais::~Relais()
{
  
}


relais.h
#ifndef DEF_RELAIS
#define DEF_RELAIS
#include <string>
#include <stdio.h>
#include <stdlib.h>


class Relais
{
    public:
      Relais();
      ~Relais();
      void ouvrir();
      void fermer();
    private:
};
#endif

3 réponses

Viking57 Messages postés 68 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 28 juillet 2014 5
31 mars 2014 à 13:59
Bonjour, Dis moi tu n'aurais pas oublier d'initialiser MonRelai pour qu'il puisse utiliser des fonctions?
0
Comme ceci ?



void Chargeur::demarrer_charge() : MonRelais
{
cout << "Demarrage de la charge" << endl;
MonRelais.ouvrir();
}


Je peut pas testé a cette heure, pas les outils nécessaires, je teste demain
0
Viking57 Messages postés 68 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 28 juillet 2014 5
1 avril 2014 à 16:21
par exemple

Relais MonRelais = new Relais();
MonRelais.ouvrir();
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 1/04/2014 à 23:30
Bonsoir, tu est en Master informatique et tu fais des erreurs de débutant ?
private:
      Relais MonRelais();


Bref, c'est faux cet exemple, pourquoi parce qu'il y a déjà des erreurs dès le début.
Rappel
private:
      Relais MonRelais();


Votre soi-disant objet "Relais MonRelais()" est déclaré comme une fonction renvoyant un objet du type "Relais ", pour corriger cette petite erreur et utiliser votre objet "Relais" il faudrait écrire de la façon suivante:
 Relais MonRelais; 
.
Cependant quand je vois ça, je me demande vraiment qu'est-ce que l'ont vous apprend en master informatique ou tu à simplement oublier tes cours sur la programmation objet et les pointeurs.
Si on fait un accès avec ça
 -> 
donc tu doit initialiser ton objet comme ceci (rappel notion de Tas et Pile )
type objet = new type;
objet->ouvrir(); 

/* et le contraire est */
type objet;
objet.ouvrir();


Un exemple pour essayer de comprendre
en-tête Classe
#ifndef DEF_TESTE_H
#define DEF_TESTE_H

#include <iostream>

class Chargeur;
class Relais;

/**
 * Class Relais
 */
class Relais{
 
 public:
  Relais(void);
  ~Relais(void);
  void Ouvrir(void);
  void Fermer(void);
};

/**
 * Class Chargeur
 */
class Chargeur{

 public:
  Chargeur(void);
  ~Chargeur(void);
  void Demarer_Charge();
  void Arreter_Charge();
  
 private:
  /* deux cas d'exemple */
  Relais *pRelais;
  Relais _Relais; 
};

#endif


corps en-tête
#include "Teste.h"

Chargeur::Chargeur(void){
 
 /* instance */
 std::cout << "Constructeur de Chargeur" << std::endl;

 /* initialisation */
 this->pRelais = NULL;
 this->pRelais = new Relais();
 
}

Chargeur::~Chargeur(void){
 
 std::cout << "Destructeur de Chargeur" << std::endl;
 delete this->pRelais;
}

void Chargeur::Demarer_Charge(void){
 
 std::cout << "Demarage de la Charge " << std::endl;
 
 /* cas 1 */
 this->pRelais->Ouvrir();
 
 /* cas 2 */
 _Relais.Ouvrir();
}

void Chargeur::Arreter_Charge(void){
 
 std::cout << "Arret de la Charge " << std::endl;
 
 /* Cas 1 */
 this->pRelais->Fermer();
 
 /* cas 2*/
 _Relais.Fermer();
}


/* Cas Classe Relais */
Relais::Relais(void){
 
 std::cout << "Constructeur de Relais" << std::endl;
}
Relais::~Relais(void){
 
 std::cout << "Destructeur de Relais" << std::endl;
}

void Relais::Ouvrir(void){
 
 std::cout << "Ouverture du Relais" << std::endl;
}

void Relais::Fermer(void){
 
 std::cout << "Fermeture du Relais" << std::endl;
}

fichier Principale
#include <iostream>
#include <cstdlib>

#include "Teste.h"
 
int main(void){
 
 /* Premier Cas */
 Chargeur *pChargeur = NULL;
 pChargeur = new Chargeur();
 
 pChargeur->Demarer_Charge();
 pChargeur->Arreter_Charge();
 delete pChargeur;   // Appel destructeur
 
 /* Juste pour La séparation des deux cas */
 std::cout << " " << std::endl;
 std::cout << "####-> Deuxieme cas <-####" << std::endl;
 std::cout << " "<< std::endl;
 
 /** 
 * Deuxieme cas & pas besoin de destructeur 
 * il le fait automatiquement 
 **/
 Chargeur _Chargeur;
 _Chargeur.Demarer_Charge();
 _Chargeur.Arreter_Charge();
 
 return (0);
}


à bientôt
0
Viking57 Messages postés 68 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 28 juillet 2014 5
2 avril 2014 à 10:12
oula oui ... je devais pas être réveiller hier ... oui erreur de débutant je m'en excuse
0