Problème instanciation de classe [Résolu]

Signaler
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008
-
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008
-
Bonjour, je suis débutant, j'ai suivi quelques tutos du site du zéro qui sont très bien faits et pour aller plus loin, je me frotte aux classes, et là je commence (déjà) à butter avec un code tout con:

#include
using namespace std;

class miaou{
    public:
    miaou::miaou(){
        cout << "miaou !!" << endl;
    }
    void miaou::test(){
        cout << "test!!!" << endl;
    }
};

miaou frimousse;
frimousse->miaou();

Je code avec code::blocks et avec ce code ridiculement petit quand je compile il me dit:
error: expected constructor, destructor, or type conversion before '->' token

Plizz Help ! [Javascript:Insert_Emoticon('/imgs2/smile_sad.gif'); ]
Merci d'avance pour cette question qui peut vous sembler con mais bon bon je suis au bon endroit pour poster ça je pense ?

13 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pour pouvoir appeler tes méthodes, tu dois les mettre en public (elle étaient en private).
Le Avion:: est a mettre seulement si tu définis tes méthodes en dehors de la classe
av2 n'était pas initialisé. Tu peux l'initialiser en faisant new avion.
Il reste un truc: la mémoire allouée dans init nest pas libérée
Voila un exemple complet qui devrait compiler et s'exécuter sans erreur:

#include
using namespace std;

class Avion {
private:
    char _immatriculation[6], *_type;
    float _poids;
    void _erreur(char *message);

public:
    void init(char m[], char *t, float p) {
        strcpy(_immatriculation, m);
        _type = new char [strlen(t)+1];
        strcpy(_type, t);
        _poids = p;
    }
    void affiche() {
        cout << _immatriculation << " " << _type;
        cout << " " << _poids << endl;
    }
};

int main()
{
  Avion av1;
  Avion *av2 = new Avion();
  Avion compagnie[10]; // un tableau d'instances

  av1.init("FGBCD", "TB20", 1.47);
  av2->init("FGDEF", "ATR 42", 80.0);
  compagnie[0].init("FEFGH","A320", 150.0);

  av1.affiche();
  av2->affiche();
  compagnie[0].affiche();

  delete av2;
}

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
92
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
16 janvier 2007

Salut brian,
C'est tout bete.
Quand tu fais 'miaou frimousse'. Tu instancie, donc tu crer un objet 'frimousse' de type 'miaou'.

Pour acceder a tes methodes, tu utilises donc le point et non la fleche.

La fleche te permettrai d'acceder aux methodes si frimousse etait un pointeur d'objet.
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

hmm pareil avec un point m^me punition sauf qu'il m'indique le point
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Deja enleve le mioua de tes fonctions membres:
class miaou{
    public:
    miaou(){
        cout << "miaou !!" << endl;
    }
    void test(){
        cout << "test!!!" << endl;
    }
};

miaou frimousse;
frimousse.test();

Depuis quand un constructeur est une fonction ! :)
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

pas mieux:

class miaou{
    public:

    void miaou::test(){
        cout << "test!!!" << endl;
    }
};

miaou frimousse;
frimousse.test();
Messages postés
24
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2007

class miaou{
public:
miaou();
void test(){
cout << "test!!!" << endl;
}
};

miaou frimousse;
frimousse.test();
No comment ...
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

soyez cool svp je me démerde comme je peux, c'est pas facile d'apprendre seul, s'il vous plaît soyez constructifs
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oue mais tout ca, ya deja 15 sites qui en parlent, c'est pour ca que c'est frustrant.

Mais donne plus de code, car ca doit venir d'ailleurs.
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

Désolé mais cet exemple est identique à ce que j'ai trouvé dans un cours d'un iut alors bon je t'ai pas obligé à me répondre luthor si des débutants qui viennent de trouver comment ça fonctionne me répondent ça me va amplement... Te force pas vraiment c pas la peine !
pour ceux que ça intéresse de corriger mon code pour que je puisse progresser le voici:

#include
using namespace std;

class Avion {
    public :
    private :
    char _immatriculation[6], *_type;
    float _poids;
    void _erreur(char *message);

    void Avion::init(char m[], char *t, float p) {
        strcpy(_immatriculation, m);
        _type = new char [strlen(t)+1];
        strcpy(_type, t);
        _poids = p;
    }
    void Avion::affiche() {
        cout << _immatriculation << " " << _type;
        cout << " " << _poids << endl;
    }
};

Avion av1;
Avion *av2;
Avion compagnie[10]; // un tableau d’instances

av1.init("FGBCD", "TB20", 1.47);
av2->init("FGDEF", "ATR 42", 80.0);
compagnie[0].init("FEFGH","A320", 150.0);

av1.affiche();
av2->affiche();
compagnie[0].affiche();

Ce code donne exactement la même erreur lorsque je compile, voilà je suis bien sur un forum de débutant donc je pose des questions de débutant auxquelles je n'ai pas trouvé de réponse, donc ceux que ça fatigue... eh bien ne vous fatiguez pas mais c'est désagréable d'être aussi mal acceuilli sur un forum [Javascript:Insert_Emoticon('/imgs2/smile_angry.gif'); ]
Merci d'avance à ceux qui se rappellent encore de leurs débuts.
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

Je te remercie beaucoup ton code compile et fonctionne à merveille je vais pouvoir franchir ce cap grâce à ton aide il ne me reste plus qu'a étudier cela en détail merci.
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

Voilà je n'ai pas encore tout compris mais cela commence à rentrer, j'ai donc refait mon exemple corrigé:

class miaou{
    public:
    void test(){
        cout << "test!!!" << endl;
    }
};

int main (){
    miaou frimousse;
    frimousse.test();
}

Ma seule question est que je ne vois pas de constructeur, est ce facultatif ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Si tu ne fournis pas de constructeur, il y a un constructeur par défaut qui est utilisé pour contruire les objets (qui construit tous les objets de ta classe avec leur constructeur par défaut).
Par contre, si tu crées un autre constructeur (prenant des paramètres), le constructeur par défaut n'est plus disponible (il faut l'écrire à la main).

Parfois aussi on est obligé de définir un constructeur (par exemple si la classe mère n'a pas de constructeur sans paramètres).

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
18
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
26 juin 2008

Merci pour tes explications claires et conviviales