E2177 Redéclaration de #pragma package avec différents arguments (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs et avertissements du compilateur (C++) - Index

L'erreur E2177 est typiquement rencontrée quand #pragma package(smart_init) est utilisé dans un fichier d'en-tête (non recommandé) et qu'un autre #pragma package(smart_init) est utilisé dans un module source qui inclut (#include) le fichier d'en-tête. Les différents arguments auxquels l'erreur fait référence sont les noms du fichier source et du fichier d'en-tête. Le compilateur ne peut pas déterminer le nom d'unité à utiliser.

Plus de plus amples détails

Le #pragma package(smart_init) indique au compilateur de préciser au lieur que c'est une unité. Le compilateur le fait en générant deux enregistrements de commentaire : l'un qui spécifie le nom de l'unité, et l'autre qui spécifie les indicateurs de l'unité. Vous pouvez voir ces enregistrements en exécutant tdump.exe sur le fichier objet.

Lors de la gestion des fichiers objet "unité", le lieur effectue une analyse supplémentaire pour déterminer l'ordre dans lequel les objets globaux des unités doivent être initialisés. Pour calculer l'ordre, le lieur recherche des références à d'autres fichiers objet "unité". Notez que s'il existe des dépendances circulaires entre des objets, l'ordre de ces objets est indéfini. Notez aussi que la sémantique "unité" peut altérer l'ordre dans lequel les constructeurs d'objets globaux et les routines #pragma startup/exit sont invoqués. Si votre code ne fait pas référence aux symboles déclarés dans les unités Delphi (telles que VCL ou FMX) et n'a pas de dépendances sur l'ordre de la construction des objets globaux (ce qui est le cas de la plupart du code C++), vous n'avez probablement pas besoin de la sémantique "unité" et vous pouvez retirer le #pragma package(..) généré par Fichier > Nouveau > Unité - C++Builder.

Voir aussi