Dans cet article, nous aborderons le dilemme de l'implémentation de fonctions membres en ligne dans des fichiers .cpp malgré la convention de placement dans les en-têtes.
Le problème vient de l'inclusion circulaire, comme le démontrent les extraits de code ci-dessous :
<code class="cpp">// File A.h #include "B.h" class A { B b; };</code>
<code class="cpp">// File B.h #include "A.h" // forward declaration class B { inline A getA(); };</code>
En raison de la dépendance circulaire, l'implémentation de getA() doit être placé dans B.cpp :
<code class="cpp">// File B.cpp #include "B.h" #include "A.h" inline A B::getA() { return A(); }</code>
Le compilateur en ligne getA ?
Non, sauf si l'utilisation de getA() se fait dans B.cpp lui-même.
Importance des mots-clés en ligne
Le mot-clé en ligne dans la définition en dehors du corps de la classe est le plus significatif.
Manières alternatives de définir le contenu en ligne Fonctions membres dans les fichiers .cpp
Malheureusement, il n'existe pas d'approche alternative pour placer la définition d'une fonction membre en ligne dans son fichier .cpp. La norme exige que le compilateur voie la définition de la fonction partout où elle est appelée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!