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 :

erreur compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut erreur compilation
    Bonjour ,
    Je suis en train d'essayer de compiler une lib qui est en C++ et moi je bosse en C. Lors de la compile j'ai plusieurs messages de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header.h error: ISO C++ forbids declaration of `getCol' with no type
    En regardant dans le code de plus pres, j'ai des declaration de fonction dans la partie public de la classe sans retour de type, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class IMAGE {
    public :
     getCol() {return row;}
    readBuffer (char *filename);
     writeBuffer(char *filename, double * buff);
    void initCalcul();
    Ce qui est etrange, c'est que des foncitons avec retour et sans retour sont melangées....

    Est ce qu'il existe à votre avis un moyen (ou une option de compile) permettant de contourner ce probleme ?
    Merci de votre aide...
    --
    Seb

  2. #2
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    j'ai trouve ca sur le forum mais pas de lien vers les options :http://nicolasj.developpez.com/artic...ibilites/#LI-E
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Type de retour d'une fonction
    En C, si vous omettez le type de retour d'une fonction lors de sa déclaration, le compilateur considère que la fonction retourne un int mais en C++ cela n'est pas permis :
     
    ISO C++ forbids declaration of `function' with no type
     
    	Un compilateur C bien paramètré vous signalera cet oubli par un warning.

  3. #3
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Tu n'essais quand meme pas de compiler une librairie c++ que tu veux intéger dans ton C ??? Rassure moi

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Les types de retour de tes fonctions sont manquant.
    En C++ les seules fonctions membre sans types de retour sont les constructeurs et les destructeur. Tout le reste est, à ma connaissance, une erreur

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    Oui c'est ce que j'essaie de faire...pk

    Citation Envoyé par niglo
    Tu n'essais quand meme pas de compiler une librairie c++ que tu veux intéger dans ton C ??? Rassure moi

  6. #6
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    Tout depend de la norme utilisée non ?

    Citation Envoyé par VoidSeer
    Les types de retour de tes fonctions sont manquant.
    En C++ les seules fonctions membre sans types de retour sont les constructeurs et les destructeur. Tout le reste est, à ma connaissance, une erreur

  7. #7
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Si tu fais un projet en C, tu ne peux inclure de classe C++. C'est logique d'ailleurs, sinon il n'y aurais pas de C et C++.

    Par contre, si tu fais un projet C++, tu peux facilement y intégrer du C. Eh oui, C++ porte plutôt bien son nom !

    Tu n'as pas trouvé d'équivalent en C de ta librairie C++ ??
    C'est quoi comme lib que tu essais de compiler ??
    Tu ne peux pas tout faire en C++,ca serait quand même plus pratique, enfin je trouve...

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Citation Envoyé par fenec
    Tout depend de la norme utilisée non ?

    Citation Envoyé par VoidSeer
    Les types de retour de tes fonctions sont manquant.
    En C++ les seules fonctions membre sans types de retour sont les constructeurs et les destructeur. Tout le reste est, à ma connaissance, une erreur
    Dans toutes les normes C++ que je connais, et en particulier celle en vigueur actuellement.

  9. #9
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    Je demanderai bien l'avis de Nicolas sur ce sujet CF ce qu'il ecrit sur le sujet :
    [/quote]http://<br /> http://nicolasj.devel...s/#LI-E <br />

    [quote="VoidSeer"]
    Citation Envoyé par fenec
    Tout depend de la norme utilisée non ?

    Citation Envoyé par VoidSeer
    Les types de retour de tes fonctions sont manquant.
    En C++ les seules fonctions membre sans types de retour sont les constructeurs et les destructeur. Tout le reste est, à ma connaissance, une erreur
    Dans toutes les normes C++ que je connais, et en particulier celle en vigueur actuellement.

  10. #10
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    Je m"en suis sortie en mettant des int devant toutes les focntions pointés mais je suis sur qu'il y a une solution plus elegante avec une petite option de compile que je n'arrive pas à trouer ?

  11. #11
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Avant de mettre des int, tu as regardé ce que les fonctions retournaient ?
    Si elles ne retournent pas, il est plus judicieux de mettre un void.

  12. #12
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Par défaut
    Je ne pense pas non... car dans des normes plus anciennes le type par defaut c'est in et pas void.
    Citation Envoyé par niglo
    Avant de mettre des int, tu as regardé ce que les fonctions retournaient ?
    Si elles ne retournent pas, il est plus judicieux de mettre un void.

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Citation Envoyé par fenec
    Je demanderai bien l'avis de Nicolas sur ce sujet CF ce qu'il ecrit sur le sujet
    Ben il est du même avis que moi, non ? En C++, on ne peut pas omettre la valeur de retour d'une fonction sauf constructeur et destructeur.

  14. #14
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par fenec
    Je ne pense pas non... car dans des normes plus anciennes le type par defaut c'est in et pas void.
    Citation Envoyé par niglo
    Avant de mettre des int, tu as regardé ce que les fonctions retournaient ?
    Si elles ne retournent pas, il est plus judicieux de mettre un void.
    Tout dépend si ta fonction retourne ! Si elle ne retourne pas et que tu mets un int comme type de retour, tu dois modifier le contenu de la fonction pour lui faire retourner quelque chose quand elle a fini (return 0 par exemple).

  15. #15
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    je n'ai rien trouvé dans soustrup ni sur le net, mais de mémoire en C++ le type de retour par defaut est int. donc écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        f()
         {
          // du code
         }
    revient à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f()
    {
    // du code 
    }
    Et on peut le faire pour n'importe quelle fonction pas seulement les constructeurs. Mais l'absence du type de retour est à proscrire, car trop souvent les gens confondent rien et void et donc cette façon de faire induit des confusions.

    Sinon pour l'intégration intégrer du C dans du C++ reste le plus facile. Souvent ce la revient a changer de compilo (de C vers C++) et changer certain proto de fonction.

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Les fonctions en C++ n'ont pas de type implicite.
    Compile ton exemple avec ton compilateur C++ pour t'en convaincre.

  17. #17
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        f()
    {
    // du code
    }
    compile est d'après le livre de delannoy (§ 3.2.2) c'est normal car le type implicite en C++ est int. Maintenant Delannoy n'est peut être pas B Stroustrup, et je n'ai rien trouvé de plus officiel que cela.

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Si c'est au "Programmer en langage C++" auquel tu fais référence, j'enpossède une édition.
    Je ne sais pas s'il y en a eu plusieurs version, mais la mienne est assez ancienne (header standard finissant par .h, etc...) et comprend pas mal de coquilles.

    Je ne saurais pas dire si ne pas spécifier le retour d'une fonction a été licite dans une vielle norme C++, mais en tout cas ce n'est plus le cas.
    Le meilleur exemple est la fonction spécial main qui en C++ doit explicitement être déclarée comme retournant un int (le retour étant lui implicite).

  19. #19
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Citation Envoyé par BigNic
    je n'ai rien trouvé dans soustrup ni sur le net, mais de mémoire en C++ le type de retour par defaut est int. donc écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        f()
         {
          // du code
         }
    revient à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f()
    {
    // du code 
    }
    Et on peut le faire pour n'importe quelle fonction pas seulement les constructeurs. Mais l'absence du type de retour est à proscrire, car trop souvent les gens confondent rien et void et donc cette façon de faire induit des confusions.

    Sinon pour l'intégration intégrer du C dans du C++ reste le plus facile. Souvent ce la revient a changer de compilo (de C vers C++) et changer certain proto de fonction.
    C'est bien vrai

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    D'ailleurs, après un coup d'oeil sur le web, le type de retour implicite n'existe plus en C99 non plus.

Discussions similaires

  1. RXControl RxRichEdit ERREUR Compilation
    Par loleske dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/02/2005, 18h12
  2. [FreePascal] Erreur compilation ou défaut Dev-Pascal ?
    Par molesqualeux dans le forum Free Pascal
    Réponses: 5
    Dernier message: 27/12/2004, 10h00
  3. [Débutant]Erreur compilation !
    Par gandalf_le_blanc dans le forum AWT/Swing
    Réponses: 23
    Dernier message: 30/08/2004, 14h23
  4. Trop de message d'erreurs: compilation KO
    Par jeannot27 dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/01/2004, 16h45
  5. Erreur compilation DX8.1 VC++ 6
    Par d.vidal dans le forum DirectX
    Réponses: 1
    Dernier message: 10/09/2003, 09h04

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