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 :

Pb compilation C++ functions inline 'used but never defined'


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut Pb compilation C++ functions inline 'used but never defined'
    Bonjour,

    J'essaye de compiler un code source assez ancien (2001) .
    Celui ci avait était compilé ave gcc2.2 et sans problème à l'époque

    Il s'agit du serveur de mailing list Limez (www.limez.net) dont je gere le projet.

    J'ai à plusieurs endroit des "Warnings" de ce type :

    inline function `void Task::setStart(long unsigned int)' used but never defined

    Je ne sais pas comment les résoudres. Ces warnings empêchent le linking.

    Si quelqu'un peut m'aider je me ferai un plaisir de lui communiquer les sources que nous avons déja modifié par rapport à la version téléchargeable. Nous avons résolu beaucoup d'erreurs.

    Cdt.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    tout ce que je peux te dire c'est que les fonctions inline doivent être dans un fichier d'en-tête et non dans un fichier .cpp

    J'espère que cette maigre information t'aidera...

  3. #3
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    salseropom, excuse moi mais c'est erroné, on peut tout à fait déclarer des méthodes inline dans l'entête et mettre leur corps dans un cpp, il suffit de déclarer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Machin {
     
    inline FctInline (int i);
    };
    Pour le posteur initial, tu es sur de ne pas avoir tout simplement un problème de liens? Ou bine un fichier utile qui a tét supprimé.

    Citation Envoyé par salseropom
    Salut,
    tout ce que je peux te dire c'est que les fonctions inline doivent être dans un fichier d'en-tête et non dans un fichier .cpp

    J'espère que cette maigre information t'aidera...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut Caine, alors mille excuses si j'ai ecrit qqch de faux. Je sais que moi aussi j'avais un pb de lien car j'avais ma fct inline dans mon .h et le corps de la fct dans le .cpp mais au moment de la compilation il y avait une erreur car la fct etait introuvable (car ma fct inline etait remplacee par son code). Et un gars sur un forum m'avait fourni cette reponse (qui marche).
    Sincerement desole si ce que j'ai ecrit est faux

  5. #5
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    C'est gentil, mais tu n'as pas à t'excuser d'apprendre. Justement, ma remarque n'est pas une réprimande mais à prendre comme une information.

    Par contre, si mes souvenirs sont exacts il faut remettre le "inlline" dans le cpp pour chaque fonctions concernées.

    Voici de précieuses informations dans la FAQ, à lire.
    http://c.developpez.com/faq/cpp/?page=inline

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    scramatte, la FAQ te donne la réponse. Va voir http://c.developpez.com/faq/cpp/?page=inline, le lien "Comment signaler au compilateur de mettre une fonction membre inline ?"

    Ca devrait t'aider

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut
    C'est bien ce que j'ai essayé de faire comme dans la faq malheuresement ça ne fonctionne pas.

    Alors je résume

    Si je supprime les "inline" dans le fichier .h la compilation se passe sans problème (aucunes erreurs, aucuns warnings) par contre impossible de réaliser l'édition des liens. Au moment de l'édtion Il cherche toujours les même fonctions.

    manager.o(.text+0x45a): In function `Manager::start()':
    /usr/src/limez_svn/trunk/src/manager.cc:129: undefined reference to `Task::setStart(unsigned long)'
    manager.o(.text+0x46b):/usr/src/limez_svn/trunk/src/manager.cc:130: undefined reference to `Task::setJob(JOB)'
    manager.o(.text+0x473):/usr/src/limez_svn/trunk/src/manager.cc:131: undefined reference to `Task::getPid()'
    manager.o(.text+0x47f):/usr/src/limez_svn/trunk/src/manager.cc:131: undefined reference to `Task::setPid(long)'

    Si je supprime les "inline" dans les 2 fichiers (.h, .cc) le programme se compile et s'execute


    En fait il y'a 3 fichiers task.cc, task_def.h, task_inl.h. Et dans la FAQ il est dit qu'il faut proceder ainsi et definir les fonctions dans "task_def.h" et declarer dans un autre fichier ici "task_inl.h"

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Déclarer inline une fonction pour mettre son corps dans un cpp n'a pas de sens, puisque le compilo ne pourra plus retrouver celui-ci lorsqu'il voudra remplacer les appels à la fonction par son code.
    Même combat que pour les templates.

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut
    Je suis d'accord mais apparament c'est ce que l'auteur originale à fait et ça ne fonctionne pas ???

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/06/2011, 15h39
  2. [AC-2007] Erreur de compilation sur function DateEchéance
    Par hyperion13 dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/04/2010, 20h09
  3. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  4. OPtions de compilation - Switch sur un 'using'
    Par gouliath dans le forum C#
    Réponses: 2
    Dernier message: 13/04/2007, 16h16
  5. [VC++6] Functions INLINE, c'est vraiment efficace ?
    Par AliceD dans le forum Visual C++
    Réponses: 1
    Dernier message: 19/08/2006, 11h45

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