Classe ?

Belialis -  
Viking57 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   5
 
Bonjour, Dis moi tu n'aurais pas oublier d'initialiser MonRelai pour qu'il puisse utiliser des fonctions?
0
Belialis
 
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   Statut Membre Dernière intervention   5
 
par exemple

Relais MonRelais = new Relais();
MonRelais.ouvrir();
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
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   Statut Membre Dernière intervention   5
 
oula oui ... je devais pas être réveiller hier ... oui erreur de débutant je m'en excuse
0