IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de compilation


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut Problème de compilation
    Bonsoir,

    j'ai eu un exam en C++ il y a 2 semaines et comme question, nous avons eu:


    Tout d'abord, voici le code de l'énoncé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    class Modele;
     
    class Vue
    {
     
    	public:
     
    		Modele *m;
     
    		Vue(Modele *mm)
    		{
    			m=mm;
    		}
     
     
    		void afficher()
    		{
    			cout<<m->val<<endl;
    		}
     
    };
     
    class Modele
    {
    	public:
     
    		int val,nb;
     
    		Vue *v[3];
     
    		Modele():val(5),nb(0){}
     
    		void attach(Vue *v_)
    		{
    			v[nb++]=v_;
    		}
     
    		void afficher()
    		{
    			v[0]->afficher;
    		}
     
     
     
     
    };
     
     
    void main()
    {
     
    	Modele m;
    }
    les questions étaient les suivantes:
    1) Est-ce que ce code se compilera sans problème ? Si non, que faut-il faire pour qu'il se compile ?
    2) Que faut-il faire si l'on rajoute m.afficher(); dans le main pour que ça compile à nouveau ?


    Je viens de tester, je ne comprends rien je n'y arrive pas,

    Merci de votre aide

  2. #2
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Bonsoir !

    Tout d'abord, utilises stp les balise CODE ( édite ton message, et c'est le bouton dièse quand tu écris le message) pour la lecture. ça conservera l'indentation et fera plein de choses pour améliorer la lisibilité.


    Ensuite tu dis :

    Je viens de tester,
    Bonne idée de tester pour comprendre ! (meme si en examen tu ne peux pas ).
    Et que se passe t'il ? (quels sont les messages d'erreur dans les 2 cas) . ça devrait t'aider en partie à comprendre le problème.

    je ne comprends rien
    Si tu ne comprends vraiment RIEN alors il faudra commencer par apprendre le C++, mais je doute que tu ne comprennes rien du tout (ou alors repost quand tu connaitras au moins les bases). Dis nous plus précisément ce que tu ne comprends pas : ce que le code est censé faire ? Pourquoi ça ne compile pas ? Un truc /machin / certain détail que tu aurais fais autrement ? (et dans ce cas comment ? )

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    1) v[0]->afficher; devrait être v[0]->afficher(); A croire que c'est une erreur involontaire.
    Puisque que tu testes, tu dois avoir l'erreur suivante qui est plus intéressante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mvc.cpp: In member function `void Vue::afficher()':
    mvc.cpp:12: error: invalid use of undefined type `struct Modele'
    mvc.cpp:4: error: forward declaration of `struct Modele'
    Qu'en déduis-tu ?

    2) Bizarre la question. Ce n'est pas la ligne que tu rajoutes qui va entraîner une erreur à la compilation. Toutefois, il y a une erreur à l'exécution. En effet, pour afficher le modèle, il faut au moins une vue (sinon v[0] n'existe pas). Tu dois donc créer une vue et l'attacher au modèle.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    En effet, c'étais bien v[0]->afficher(); et pas v[0]->afficher; tout court c moi qui me suis trompé en recopiant, dsl

    Sinon, la question c'est que faut-il faire pour que ça compile donc qu'est-ce qu'on doit modifier dans le code pour que ça marche (enfin pour que ça compile).

    Je sais bien que je dois créer une vue et l'attacher au modèle pour que ça marche mais je ne sais comment le faire vu qu'il y a déjà dans
    la class Modele : Vue *v[3]; un peu plus haut donc je me dis que v[0] existe

    Et la 2ème question, c'est que faut-il faire ensuite pour que lorsqu'on affiche m.afficher(); dans le main ça compile et je pense que c'est ici qu'il faut attacher la vue au modèle mais j'en suis pas sûr

    Quand je disais que je ne comprenais rien du tout, je ne vois pas où il faut en venir sinon je connais le c++, je suis pas un expert mais je me débrouille plutôt bien, merci de votre aide

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    En fait voici les erreurs qu'ils me marquent moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error C2027: use of undefined type 'Modele'
    see declaration of 'Modele'
    error C2227: left of '->val' must point to class/struct/union
    Sinon maintenant dans mon main j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void main()
    {
     
    	Modele m;
    	m.val=8;
     
    	Vue vue1(&m);
     
    	m.attach(&vue1);
     
    	m.afficher();
     
    }
    je pense que mon main est bon, donc ça répondrait à la question 2 de ma prof par contre, je ne sais pas ce qui cloche au niveau des erreurs et je cherche désespérément

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    Voilà j'ai trouvé mon problème, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    class Modele;
     
     
    class Vue
    {
     
    	public:
     
    		Modele *m;
     
    		Vue(Modele *mm)	// Constructeur avec un paramètre
    		{
    			m=mm;
     
    		}
     
    		void afficher();
     
     
    };
     
    class Modele
    {
    	public:
     
    		int val,nb;
     
    		Vue *v[3];
     
    		Modele():val(5),nb(0){}	// Constructeur sans paramètre (constructeur par défaut)
     
    		void attach(Vue *v_)
    		{
    			v[nb++]=v_;
    		}
     
    		void afficher()
    		{
    			v[0]->afficher();
    		}
     
    };
     
     
    void Vue::afficher(){cout<<m->val<<endl;}
     
     
    void main()
    {
     
    	Modele m;
    	m.val=8;
     
    	Vue vue1(&m);
     
    	m.attach(&vue1);
     
    	m.afficher();
     
    }

    en fait c normal en y pensant, la class Vue ne connaissait pas l'entier val donc ne voulait pas compiler, voilà problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de compilation sous visual C++
    Par fabmili dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2004, 19h52
  2. problème de compil devc++ socket
    Par stefdem dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 11/12/2003, 11h33
  3. Réponses: 1
    Dernier message: 29/10/2003, 12h16
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo