Где вы объявляете константу в цели c? - PullRequest
50 голосов
/ 31 мая 2011

Я объявил константу в заголовочном файле const double EARTH_RADIUS=6353;, который импортируется в другие заголовки, и получил ошибку компоновщика.

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

По сути, я хочу, чтобы константа была доступна для всех классов в моем проекте. Где я должен это объявить?

Ответы [ 4 ]

92 голосов
/ 31 мая 2011

Вы можете объявить в шапке, определить его в файле кода.Просто объявите его как

extern const double EARTH_RADIUS;

, а затем в файле .m (обычно это .m для .h, в котором вы его объявили)

const double EARTH_RADIUS = 6353;
63 голосов
/ 02 марта 2012

Есть два способа сделать это:

1-й вариант - Как указывалось в предыдущих ответах, в файле .h :

myfile.h
extern const int MY_CONSTANT_VARIABLE;

и в myfile.m определите их

myfile.m    
const int MY_CONSTANT_VARIABLE = 5;

2-й вариант - мой любимый :

myfile.h
static const int MY_CONSTANT_VARIABLE = 5 ;
4 голосов
/ 31 мая 2011

Объявите его в исходном файле и получите внешнюю связь с ним (используя ключевое слово extern ), чтобы использовать его во всех других исходных файлах.

1 голос
/ 30 августа 2012

Лучше всего объявить это в ваших файлах .h и .m.См. Константы в Objective-C для очень подробного набора ответов на этот же вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...