Question

Pourquoi cet avertissement s'affiche-t-il dans Qt Creator: `inline function & # 8216; bool Lion :: growl () & # 8217; utilisé mais jamais défini?

J'ai revérifié mon code et obtenu une déclaration

inline bool growl () dans Lion ( lion.h )

et l'implémentation correspondante dans lion.cpp :

booléen Lion :: growl ()

Que se passe-t-il?

EDIT: Mon hypothèse a été qu'il est légal de définir la méthode inline réelle dans le fichier .cpp (le mot clé inline avertit le compilateur de rechercher le corps de la méthode ailleurs) ou se tromper?

Je ne veux pas encombrer mes fichiers d'en-tête avec des détails d'implémentation.

Était-ce utile?

La solution

Eh bien, je ne connais pas le problème exact, mais pour commencer:

  • Les méthodes en ligne sont supposées être implémentées dans le fichier d'en-tête. Le compilateur a besoin de connaître le code pour le insérer .
  • En utilisant également le " inline " mot-clé dans la déclaration de classe n'a aucun effet. Mais cela ne peut pas nuire non plus.

Voir aussi: c ++ faq lite

Autres conseils

  

Les méthodes en ligne sont supposées être implémentées dans le fichier d'en-tête. le   Le compilateur a besoin de connaître le code pour le mettre en ligne.

Sauf si la fonction inline est utilisée dans le même projet, éventuellement dans un autre fichier contenant #include dans son en-tête.

Je manque, il y a une telle restriction pour les bibliothèques car restreindre les en-têtes aux prototypes de fonctions rend les choses plus lisibles.

Qu'en est-il de #include --ing le fichier .cpp?

En plus de ce que Johan a dit, vous ne pouvez pas avoir une définition et une déclaration séparées pour la fonction même si les deux sont dans le même fichier d’en-tête. Cela est particulièrement vrai pour les fonctions membres des classes. Le code de fonction doit être de la forme:

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

Et PAS de la forme

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top