Подтвердить что ты не робот

Где вы объявляете константу в объективе c?

Я объявил константу в файле заголовка 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

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

4b9b3361

Ответ 1

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

extern const double EARTH_RADIUS;

то в файле .m где-нибудь (обычно это .m для .h вы его объявили)

const double EARTH_RADIUS = 6353;

Ответ 2

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

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

myfile.h
extern const int MY_CONSTANT_VARIABLE;

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

myfile.m    
const int MY_CONSTANT_VARIABLE = 5;

Вторая опция - Мой любимый:

myfile.h
static const int MY_CONSTANT_VARIABLE = 5 ;

Ответ 3

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

Ответ 4

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