6
votes

Erreur de liaison sur la fonction non intégrée définie dans le fichier d'en-tête?

fonction non intégrée définie dans le fichier d'en-tête avec des gardes xxx

résultats dans la liaison Erreur: Déjà défini dans quelque purée.Obj File Faire fonctionner la fonction fonctionne bien, mais je ne suis pas en mesure de comprendre pourquoi la fonction est déjà erronée dans le premier cas.


0 commentaires

3 Réponses :


4
votes

Comme il n'est pas en ligne, chaque unité de traduction aura sa propre copie de la fonction résultant de la fonction définie plusieurs fois.


0 commentaires

11
votes

Si l'en-tête est inclus dans plusieurs fichiers de source et que la fonction n'est pas marquée comme "en ligne", vous aurez plus d'une définition. Les gardes incluent seulement empêchent de multiples inclusions dans le même fichier source.


1 commentaires

Je soulignerais également que le mot clé inline n'est pas nécessaire lorsque vous parlez de méthodes de classe définies dans la déclaration de classe Stackoverflow. COM / A / 145952/2436175



8
votes

Vous avez violé la règle d'une définition . Si vous souhaitez définir une fonction directement dans l'en-tête, vous devez le marquer comme en ligne - qui permettra de définir la fonction plusieurs fois. Notez également que inline n'a aucune autre signification, en particulier cela ne force pas le compilateur à des appels en ligne (contrairement à la croyance populaire).


0 commentaires