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 compréhension sur déclaration et utilisation d'une fonction.


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut Problème de compréhension sur déclaration et utilisation d'une fonction.
    Bonjour,

    J'ai pour projet de reprendre une section du code d'un collègue qui ne fait plus partie de la société.

    Je résume au plus simple :

    log.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _log(section,type,level,msg,args...) if(checklog(section,type,level)) __log_entry(section,type).form(tuxlang[msg].c_str() , ## args)<<endl;
    log.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ostream& __log_entry(int section,int type)
    {
            return logfile<<tuxdate()<<" "<<tuxhostname<<" ["<<tuxpid<<"] ["<<logsec[section]<<"] "<<logtyp[type]<<" ";
    }
    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      _log(LS_EDI,L_DBG,1,"loadchrst",filename.c_str());
    Mon erreur à la compilation sous LINUX avec un GCC 4.6.1 :

    main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    766:3: erreur: 'std::ostream' has no member named 'form'
    Mon problème est que je ne vois nulle part la déclaration du membre form de la fonction __log_entry dans log.h et que je ne comprend la déclaration de _log dans log.h avec tous les éléments qui se suivent.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    C'est bizarre: La fonction __log_entry() telle qu'elle est déclarée retourne forcément un ostream, qui n'a évidemment pas de méthode "form" (qui d'ailleurs semble être une méthode d'écriture formatée).

    PS: Apparemment, form() est une ancienne méthode GNU C++ qui aurait été supprimée (sans doute pour compatibilité avec les standards).
    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 averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    Bonjour à tous,

    Je relance le sujet :

    La méthode form qui décline de ostream était une méthode appartenant à l'ancienne librairie STL SGI qui est totalement dépassé.

    Mon objectif est de trouver une fonction ou méthode qui remplacerait la méthode ostream::form.

    Pourrais -je en avoir un exemple si possible?

    Merci pour votre aide par avance.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Kasyon Voir le message
    Bonjour à tous,

    Je relance le sujet :

    La méthode form qui décline de ostream était une méthode appartenant à l'ancienne librairie STL SGI qui est totalement dépassé.

    Mon objectif est de trouver une fonction ou méthode qui remplacerait la méthode ostream::form.

    Pourrais -je en avoir un exemple si possible?

    Merci pour votre aide par avance.
    Ca n'existe pas dans la librairie standard.

    Ceci dit, ça ne veut pas dire que c'est impossible. On trouve de nombreux exemples de printf() écrit en C++11 (si tu as cette possibilité), ou sinon, tu as boost.format.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    Il semble que la méthode form de ostream n'existe plus.

    Cette méthode form peut être remplacé par la fonction fprintf qui fait son équivalent ou stringstreams (je ne sais pas ce que c'est).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _log(section,type,level,msg,args...) if(checklog(section,type,level)) __log_entry(section,type).form(tuxlang[msg].c_str() , ## args)<<endl;
    Ma question est comment supprimé la partie .form de la ligne précédente par fprintf ou stringstreams.

    Je sais qu'il n'est pas judicieux de demander le code mais en voyant la syntaxe d'écriture je pourrais l'appliquer à tout le logiciel, en attendant vos réponses merci à tous ceux qui apporte leur aide sur ce site.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu as vraiment besoin de ca?
    Tu peux plus simplement définir la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::ostream& log(section,type,level) {
        if (!check(section, type, level) ) return nolog;
        return std::out <<'['<<section<<"] "<<type<<'('<<level<<") ";
    }
    Ce qui permettrai l'écriture log("core","warning",2)<<"what you want"<<std::endl;Il suffit d'écrire une héritière de ostream qui ne fait rien pour les types de bases.

  7. #7
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    La fonction fourni ne fonctionne pas.

    Est il possible d'avoir une solution en utilisant les moyens cités précedemment (fprintf ou stringstream)?

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je sais, mais comme je n'ai pas les types des variables section, type et level, j'ai fais "sans"…

    Ce type de fonction doit fonctionner, j'ai utilisé cette solution à plusieurs reprises

  9. #9
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    Merci pour ton aide, l'erreur n'est plus présente.

    Je marque le sujet comme résolu.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/09/2010, 20h10
  2. Réponses: 4
    Dernier message: 18/02/2009, 12h53
  3. Problème de compréhension sur variable %
    Par soso78 dans le forum VB.NET
    Réponses: 15
    Dernier message: 10/04/2008, 23h41
  4. Réponses: 4
    Dernier message: 01/04/2008, 15h24
  5. Réponses: 1
    Dernier message: 31/08/2007, 09h23

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