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 :

ISO C++ forbids declaration of SHA1


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut ISO C++ forbids declaration of SHA1
    Bonjour,

    le projet consiste à développer une stack ssl sur TCP. avant que je reprenne les codes sources, la stack ssl a été simulée. le gens qui étaient dessus utilisaient par exemple hashlib++ pour pouvoir utiliser des fonctions de hashage.

    j'ai donc commencé par faire un #include <openssl/ ...>

    avant que j'implémente openssl, le projet compile bien. après avoir implémenté openssl, j'obtiens les erreurs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    In file included from /home/moi/work/include/hashlib++/hashlibpp.h:50,
                     from /home/moi/work/ail/dummyupd.cpp:24:
    /home/moi/work/include/hashlib++/hl_sha1wrapper.h:74: error: ISO C++ forbids declaration of ‘SHA1’ with no type
    /home/moi/work/include/hashlib++/hl_sha1wrapper.h:74: error: expected ‘;’ before ‘*’ token
    In file included from /home/moi/work/include/hashlib++/hashlibpp.h:51,
                     from /home/moi/work/ail/dummyupd.cpp:24:
    /home/moi/work/include/hashlib++/hl_sha256wrapper.h:77: error: ISO C++ forbids declaration of ‘SHA256’ with no type
    /home/moi/work/include/hashlib++/hl_sha256wrapper.h:77: error: expected ‘;’ before ‘*’ token
    make[2]: *** [CMakeFiles/ail.dir/dummyupd.cpp.o] Erreur 1
    make[1]: *** [CMakeFiles/ail.dir/all] Erreur 2
    make: *** [all] Erreur 2
    apparemment il ne sait pas à quelle namespace appartient SHA1 et SHA256 ... mais je ne suis pas sur, je suis débutant en cpp.

    Est ce que quelqu'un pourrait m'expliquer
    1) d'ou vient exactement l'erreur
    2) comment corriger

    Merci d'avance.

    contenu de hashlibpp.h (ligne 50 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "hl_exception.h"
    #include "hl_hashwrapper.h"
    #include "hl_md5wrapper.h"
    #include "hl_sha1wrapper.h" // LIGNE 50
    #include "hl_sha256wrapper.h"
    #include "hl_sha384wrapper.h"
    #include "hl_sha512wrapper.h"
    contenu de dummyupd (ligne 24 ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <hashlibpp.h> // ligne 24
    contenu de hl_sha1wrapper.h (ligne 74)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHA1 *sha1; // ligne 74

  2. #2
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut solution temporaire
    Une solution temporaire :

    en fait les erreurs se trouvent dans le fichier dummyupd.cpp, un fichier source que je n'utilise pas pour l'instant. ce fichier inclut l'entête hashlibpp.h que j'ai alors commenté. Du coup je dois "désactiver" les instructions qui se rapportent à cette librairie. Heureusement ces instructions en questions sont regroupées dans une fonction de vérification qui renvoie 0 si tout va bien et -1 sinon.

    Ma question :

    il y a t - il un moyen de "desactiver" le code de la fonction de verif de telle sorte que quand je compile, je n'ais plus d'erreur ?
    j'ai entendu parler de #IF 0 ... #ENDIF mais je ne sais pas comment s'en servir de ce macro pour désactiver.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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
    Points : 4 551
    Points
    4 551
    Par défaut
    Deux solutions : commenter le code, ou plus simplement utiliser #if 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void f()
    {
    #if 0
      ... code à "désactiver"
    #endif
    }

  4. #4
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    D'acc
    c'est une méthode standard ?
    Il faut rajouter quoi a la compiliation ? Comment le préprocesseur peut savoir que #if 0 introduit un bloc de code à ne pas compiler/executer ? En fait je ne vois pas la logique ... Par exemple, quand on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifndef __MONFICHIER_H__  
    #define __MONFICHIER_H__
    ...
    ...
    #endif
    le compilateur teste si MON_FICHIER_H a été déja inclut ou pas.

    Mais avec un #if 0 je ne comprends pas, je l'applique tout bêtememnt ... ou est ce que le compilateur vérifie si un 0 et placé ou pas ??

  5. #5
    screetch
    Invité(e)
    Par défaut
    c'est comem un if(false) en C++, ca compile mais ca ne fait rien puisque la condition est toujours fausse.
    En preprocessor, #if 0 est la condition toujours fuasse, le code ne sera donc jamais inclus, donc c'est un peu comme un commentaire.

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    aie mince, ca m'a complètement échappé lol. Merci .
    Je pense que cette méthode est plus propre et rend la compilation plus rapide. Parce que les commentaires sont aussi parsés par le compilateur et donc on gagne du temps en utilisant les macros, non ?

  7. #7
    screetch
    Invité(e)
    Par défaut
    un avantage est que tu peux mettre en commentaire un autre commentaire (un /* */)
    un autre avantage est que tu peux imbriquer les commentaires #if 0, alors qu'avec /* */ c'est pas possible
    un inconvénient c'est que les éditeurs ne reconnaissent pas tous cette syntaxe

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/10/2011, 13h35
  2. Réponses: 14
    Dernier message: 19/07/2011, 14h43
  3. ISO C++ forbids declaration of 'Point with no type'
    Par fab87 dans le forum Débuter
    Réponses: 2
    Dernier message: 13/05/2011, 08h58
  4. ISO C++ forbids declaration
    Par inddzen dans le forum C++
    Réponses: 17
    Dernier message: 20/01/2008, 18h23
  5. Réponses: 9
    Dernier message: 15/02/2005, 13h26

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