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 :

Variable or field 'ecrire' declared void


Sujet :

C++

  1. #1
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut Variable or field 'ecrire' declared void
    Je ne comprends pas, j'ai une classe avec des fonctions virtuelles pures, et GCC refuse de me reconnaitre la méthode "ecrire" comme une fonction...
    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
    #ifndef JETON_H_INCLUS
    #define JETON_H_INCLUS
     
    #include <iostream>
    class IConteneurAutomate;
     
    class IJeton
    {
    public:
    	//virtual ~IJeton() {};
    	virtual void justBeenReadFromInfix(
    	 IConteneurAutomate &refPostfix, IConteneurAutomate &refPile) const = 0;
    	virtual void ecrire(ostream &sortie) const = 0;
     
    	virtual IJeton *clone() const = 0;
    	virtual IJeton *cloneThrow() const = 0;
     
    };
     
    #endif// ! JETON_H_INCLUS
    (j'utilise Dev-C++ avec GCC 3.4.2)
    GCC me sort ces messages d'erreurs:
    Citation Envoyé par GCC
    Jeton.h:14: error: variable or field `ecrire' declared void

    Jeton.h:14: error: `ecrire' declared as a `virtual' field
    Jeton.h:14: error: expected `;' before '(' token
    Comment faire pour que GCC veuille bien reconnaitre ma méthode "écrire" comme une méthode et non une variable ?

    Edit; bizarrement, on dirait que c'est le ostream qu'il n'aime pas, car quand je vire le paramètre, je n'ai pas cette erreur...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Finalement, j'ai corrigé l'erreur en rajoutant std:: devant ostream, mais je ne comprend pas pourquoi j'ai eu droit à une erreur pareille au lieu d'avoir un "ostream undeclared" ou un truc du genre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    je post a ta suite, car mon pb est similaire :

    j'ai utilisé l'interface de dev c++ 5 beta afin de créer mes classes...
    lorsqu'ils compile, il me genere la meme erreure (au niveau de "Setpassword"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class communication
    {
    	public:
    		// class constructor
    		communication();
    		// class destructor
    		~communication();
    		void Setpassword(string x); // sets the value of password
    	private:
    est-ce que ca peut venir d'erreures dans le corps de la fonction dans le fichier .cpp?
    (dsl : total newbee...)

    il me dit :
    variable or field 'Setpassword' declared void'
    expected ';' before (
    pour cette ligne la...

  4. #4
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Tu as essayé de mettre std::string au lieu de string comme Médinoc? Sinon là ça me semble correct.

  5. #5
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    yep, j'ai esayé, ca ne marche toujours pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Setpassword(std::ostream x);
    j'ai remis le meme type que dans son exemple...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    est-ce que <string> (ou <iostream> dans ton second test) est inclus AVANT ton header ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Citation Envoyé par hansaplast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Setpassword(std::ostream x);
    Euh mais je pense que le type de ta fonction est juste non? Pour spécifier un password c'est juste d'utiliser string. Mais pas un flux standard.

    Mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Setpassword(std::string x);
    Et vérifie que tu a inclu l'en-tête <string> en haut de ton .h.

    Pour plus d'infos FAQ : http://c.developpez.com/faq/cpp/?page=strings

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Le problème n'est pas que c'est le type de la fonction, mais que le compilo la prend pour une variable au lieu de dire que le type de son paramètre n'est pas déclaré)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Citation Envoyé par Médinoc
    Le problème n'est pas que c'est le type de la fonction, mais que le compilo la prend pour une variable au lieu de dire que le type de son paramètre n'est pas déclaré)
    Oui mais je pense que son type string devait être juste non? Et apparement vous avez eu le même problème que GCC met une erreur inappropriée, c'est pour ça que j'ai dit la même chose avec l'en-tête...

  10. #10
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    donc voila, mon fichier main :
    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
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
    #include <stdio.h>   /* Autorise l'utilisation de printf
                            et de scanf. */
    #include <stdlib.h>  /* Autorise l'utilisation de malloc
                            et de free. */
    #include <string.h>  /* Autorise l'utilisation de strcpy,
                            strlen et de strcmp. */
    #include <windows.h>  /*API win32, permettant la capture de l'ecran*/
     
     
     
    int main(){...
    et mon fichier communication.h :
    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
    // Class automatically generated by Dev-C++ New Class wizard
     
    #ifndef COMMUNICATION_H
    #define COMMUNICATION_H
     
    /**
     * implementation de base des methodes de communication reseau
     * 
     * va etre etendue en plusieurs heritages
     */
    class communication
    {
    	public:
    		// class constructor
    		communication();
    		// class destructor
    		~communication();
    		void Setpassword(std::string  x); // sets the value of password
    	private:...
    j'inclut tout dans le main, ca doit suffire non?

    (c'est ma premeire compile en C++...)

    le compilateur par defaut, c'est migw (un truc dans le genre...) je croit bien.
    est-ce que cette erreur de compile peut venir d'une autre erreure dans un autre fichier?
    (j'ai enoormement ocdé avant de pouvoir compiler... et... j'avait oublié que les string sont speciaux en C... j'avait utilisé la syntaxe de php;.. :'(... donc c'esty truffé d'erreure... mias plus loin, dans mon .cpp... pas dans le .h...

  11. #11
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Et bien déjà là, comme on te l'a dit, inclue le bon en-tête avant la définition de ta classe:
    Ensuite pour tes headers si tu fais du C++ regarde ici : http://c.developpez.com/faq/cpp/?pag...le#SL_iostream (en bas)

    Qu'entends-tu par
    j'inclut tout dans le main, ca doit suffire non?
    Tu as bien mis #include "communication.h" ?

  12. #12
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    Tu as bien mis #include "communication.h" ?
    sous dev c++ :
    non, je ne l'ai pas mis...
    si je le met, ca me met une erreure.

    j'ai telechargé code::blocks, lui me met une erreure differente :
    error : 'string' has not been declared
    et ne me genere pas d'erreure quand je met
    #include "communication.h" ?

  13. #13
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Il faudra bien l'inclure à une place, si tu utiliser la classe déclarée dedans dans un de tes autres fichiers.

    Pour le string, on ta dit de l'inclure en-haut de ton header, et de mettre std:: devant.

    Si je t'ai dit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "communication.h"
    C'est pour dans les endroits où tu l'utilise. Là je ne sais même pas si tu utilises ta classe "communication" dans le main.

  14. #14
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    ok, ca marche pour le moment...
    si je n'avait pas mit dans mon fichier .h, c'est parceque je pensait que l'inclure dans le main suffisait : dans chaque fichier, il faut tout re-inclure ?
    mais ce n'est pas possible ^^ (a dire avec la voix du grand sthroumf... tiens comment ça s'écrit ça stroumph?)

  15. #15
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Citation Envoyé par hansaplast
    c'est parceque je pensait que l'inclure dnas le main suffisait : dans chaque fichier, il faut tout re-inclure ?
    Le compilateur va d'abord compiler chaque classe une par une avant de linker le .exe. Donc il lui faut bien savoir d'ou vient cette variable string, il ne connait pas le main avant la compilation de la classe...

    Citation Envoyé par hansaplast
    tiens comment ça s'écrit ça stroumph?)
    Ca s'écrit "stroumpf" mais apparement il n'y a pas que ce mot que tu as du mal à écrire essaie de soigner un peu...

    Sinon regarde le lien de la FAQ que je t'ai mis à propos des en-têtes standards du C. Et en C++ l'allocation dynamique se fait avec new/delete et pas malloc() (encore une fois voir FAQ)...

  16. #16
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    oki, dsl pour les fautes (croit moi, j'en corrige pourtant avant de poster :'( )

    donc, faut tout réinclure a chaque fichier...
    c'est pas possible de créer un fichier genre includer.debut
    et de faire
    #include <includer.debut>
    a chaque debut de fichier?

    ce serait plus pratique non?

  17. #17
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Tu peux bien faire un fichier style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "inclusions.h"
    où tu mets tous tes #include mais je ne sais pas trop si c'est la meilleure solution, tu n'as pas forcément besoin de tout partout. Mettre une inclusion pour string.h dans chaque classe si tu les utilises me semble pas trop difficile

  18. #18
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    j'ai une autre question :
    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
    // crée une connection UDP, return false si echec
    bool communication::setConnectionUDP()
    {
    	// ********************************************************
        // Ouverture d'une Socket
        // ********************************************************
        this.mySocket = socket(AF_INET,SOCK_DGRAM,0);
        /*d'apres les doc : af_inet : permet d'utiliser IPV4
        *SOCK_STREAM => communication tcp, SOCK_DGRAM => UDP...
        */
        if (this.mySocket == INVALID_SOCKET) {
           return false;
        }
        return true;
    }
    pour acceder aux données membres d'un objet, je fait :
    en sachant que je l'ai declaré ainsi :est-ce une erreure? dois-je y acceder snas la prefixzer par this? (ca me genere une erreure)

  19. #19
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Ah là là tu devrais voir la avant de poser tes questions, tout y est!
    http://c.developpez.com/faq/cpp/?pag...EFINITION_this
    C'est un pointeur donc:
    et tu n'est pas obligé de l'employer si c'est un membre de la classe tu peux faire simplement:

  20. #20
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    dsl, j'arrete mes question saoulantes de

    merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2010, 16h12
  2. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50
  3. declarer une variable dans le query analyzer
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 29/03/2005, 11h26
  4. [debutant] declaration variable
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2004, 16h59
  5. fonction "variable doit etre declare"
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/05/2004, 20h55

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