J'ai une solution de studio visuel qui contient divers projets C++. Pour la simplicité, il y a deux projets. Un pour .lib et un autre pour .exe. Les deux utilisent l'en-tête précompilé du projet stdafx.h
. Mais l'en-tête précompilé est partagé entre les projets.définition de variable dans stdafx.cpp
Récemment quelqu'un placé définition de variable à l'intérieur stdafx.cpp
et parce qu'il est partagé entre les projets que j'ai obtenu: error LNK2005: "int x" ([email protected]@3HA) already defined in stdafx.obj
Ma question est la suivante: est-il autorisé à mettre en définitions tête précompilés? (dans la partie cpp à partir de laquelle l'en-tête précompilé est créé)
Je suppose que l'en-tête précompilé ne doit contenir que des déclarations de symboles et non des définitions. Ou ai-je tort?
En général, vous ne souhaitez pas définir une variable dans l'en-tête * de *. Chaque englobant de cet entête prendra la définition et l'éditeur de liens lancera un ajustement. – user4581301
Je déconseille d'utiliser des en-têtes précompilés à moins que la construction de votre programme prenne beaucoup de temps (comme les minutes). OMI, votre programme devrait être structuré de sorte que seulement quelques fichiers sont modifiés à la fois. La plupart des fichiers ne devraient pas être modifiés, il y a donc moins de compilations; Ainsi, le temps de construction est court. –
Ne partagez pas les en-têtes précompilés entre projets, sauf si vous pouvez garantir que les paramètres de construction du projet dans les deux projets sont identiques et resteront identiques –