Classe ?
Belialis
-
Viking57 Messages postés 68 Date d'inscription Statut Membre Dernière intervention -
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 :
Main :
Chargeur.cpp
chargeur.h
relais.cpp
relais.h
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
Bonjour, Dis moi tu n'aurais pas oublier d'initialiser MonRelai pour qu'il puisse utiliser des fonctions?
Comme ceci ?
Je peut pas testé a cette heure, pas les outils nécessaires, je teste demain
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
par exemple
Relais MonRelais = new Relais();
MonRelais.ouvrir();
Relais MonRelais = new Relais();
MonRelais.ouvrir();
Bonsoir, tu est en Master informatique et tu fais des erreurs de débutant ?
Bref, c'est faux cet exemple, pourquoi parce qu'il y a déjà des erreurs dès le début.
Rappel
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:
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
Un exemple pour essayer de comprendre
en-tête Classe
corps en-tête
fichier Principale
à bientôt
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