Problème instanciation de classe

Résolu
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008 - 5 janv. 2007 à 16:57
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008 - 6 janv. 2007 à 18:01
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 janv. 2007 à 14:04
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
3
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007
5 janv. 2007 à 17:27
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.
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
5 janv. 2007 à 17:55
hmm pareil avec un point m^me punition sauf qu'il m'indique le point
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 janv. 2007 à 18:06
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 ! :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
5 janv. 2007 à 18:40
pas mieux:

class miaou{
    public:

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

miaou frimousse;
frimousse.test();
0
AndreJAO Messages postés 24 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 septembre 2007
5 janv. 2007 à 18:48
class miaou{
public:
miaou();
void test(){
cout << "test!!!" << endl;
}
};

miaou frimousse;
frimousse.test();
No comment ...
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
5 janv. 2007 à 19:03
soyez cool svp je me démerde comme je peux, c'est pas facile d'apprendre seul, s'il vous plaît soyez constructifs
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 janv. 2007 à 23:18
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.
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2007 à 13:34
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.
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2007 à 15:07
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.
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2007 à 16:03
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 ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 janv. 2007 à 16:59
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
0
cs_brian85 Messages postés 18 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 26 juin 2008
6 janv. 2007 à 18:01
Merci pour tes explications claires et conviviales
0
Rejoignez-nous