54 votes

Où déclarez-vous constante dans l'objectif c?

J'ai déclaré cela dans un fichier d'en-tête importé dans divers autres en-têtes et j'ai eu une erreur de l'éditeur de liens

 const double EARTH_RADIUS=6353;
 

En gros, je veux que la constante soit disponible pour toutes les classes de mon projet. Alors, où dois-je le déclarer?

 Ld /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator/BadgerNew.app/BadgerNew normal i386
    cd /Users/Teguh/Dropbox/badgers/BadgerNew
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator -F/Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator -filelist /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/BadgerNew.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -framework CoreLocation -framework UIKit -framework Foundation -framework CoreGraphics -framework CoreData -o /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator/BadgerNew.app/BadgerNew

ld: duplicate symbol _EARTH_RADIUS in /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/NearbyIsiKota.o and /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/FrontPageofBadger.o for architecture i386
collect2: ld returned 1 exit status
 

96voto

Dan F Points 11380

Vous pouvez déclarer dans l'en-tête, le définir dans un fichier de code. Il suffit de le déclarer comme

 extern const double EARTH_RADIUS;
 

puis dans un fichier .m quelque part (généralement le .m pour le .h dans lequel vous l'avez déclaré)

 const double EARTH_RADIUS = 6353;
 

65voto

Xabier Points 1090

Il y a deux façons d'accomplir cela:

1ère option - Comme indiqué dans les réponses précédentes, dans le fichier .h :

 myfile.h
extern const int MY_CONSTANT_VARIABLE;
 

et dans myfile.m les définir

 myfile.m    
const int MY_CONSTANT_VARIABLE = 5;
 

2ème option - Mon préféré :

 myfile.h
static const int MY_CONSTANT_VARIABLE = 5 ;
 

4voto

Mahesh Points 20994

Déclarez-le dans un fichier source et établissez un lien externe vers celui-ci (à l'aide du mot-clé extern ) afin de pouvoir l'utiliser dans tous les autres fichiers source.

1voto

Kyle Clegg Points 8441

La meilleure pratique serait de le déclarer dans vos fichiers .h et .m. Voir Constantes dans l’objectif C pour un ensemble très détaillé de réponses concernant cette même question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X