J'ai un espace de noms avec la fonction inline qui sera utilisé si plusieurs fichiers source. Lorsque j'essaie de lier mon application, la fonction inline est signalée en tant que symboles en double. Il semblerait que mon code n'intègre pas simplement les fonctions et je me demandais si c'était le comportement attendu et comment le gérer au mieux.fonction inline dans l'espace de noms génère des symboles en double pendant le lien sur gcc
J'utilise les options suivantes: gcc -g -Wextra -pedantic -Wmissing-terrain-initializers -Wredundant-decls -Wfloat-égale--Wno Réorganiser -Wno-long-long Le même style de code semble compiler et lien correctement lors de la construction dans un environnement VC7.
L'exemple de code suivant montre la structure du code:
/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}
/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
Est-ce que OK est une variable globale dans chaque fichier cpp? Cela provoquerait une erreur de symbole en double. En supposant que ce n'est pas global, votre exemple est légal C++. Essayez de compiler avec -Winline. Quelle version de gcc utilisez-vous? –
Veuillez poster le message du compilateur. Est-ce que l'erreur se produit avec des fichiers sources minimes (juste les lignes mentionnées sans les choses impliquées par ...)? –
Une fois que j'ai changé l'un des noms de 'OK' à' OK1', ajouté une fonction 'main' vide et enlevé le' ... '; compiler les deux fichiers avec les options que vous avez fournies a fonctionné correctement pour moi. Vous devez poster plus de détails car la cause de votre erreur n'est pas ici. –