Ошибка связывания Objective-c с ошибкой дублированного символа - PullRequest
3 голосов
/ 20 июня 2010

Я новичок в Objective C и имею следующую ошибку при попытке импортировать определенный мной класс

Building target “MusicCube” of project “MusicCube” with configuration “Debug” — (1 error)
     cd /Users/varsha_vijay/Downloads/MusicCube
    setenv MACOSX_DEPLOYMENT_TARGET 10.5
    setenv PATH "/Xcode3.1.4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode3.1.4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode3.1.4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode3.1.4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk -L/Users/varsha_vijay/Downloads/MusicCube/build/Debug-iphonesimulator -F/Users/varsha_vijay/Downloads/MusicCube/build/Debug-iphonesimulator -filelist /Users/varsha_vijay/Downloads/MusicCube/build/MusicCube.build/Debug-iphonesimulator/MusicCube.build/Objects-normal/i386/MusicCube.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore -framework AudioToolbox -framework CoreGraphics -framework OpenAL -o /Users/varsha_vijay/Downloads/MusicCube/build/Debug-iphonesimulator/MusicCube.app/MusicCube
ld: duplicate symbol _num_flight_vertices in /Users/varsha_vijay/Downloads/MusicCube/build/MusicCube.build/Debug-iphonesimulator/MusicCube.build/Objects-normal/i386/Flight.o and /Users/varsha_vijay/Downloads/MusicCube/build/MusicCube.build/Debug-iphonesimulator/MusicCube.build/Objects-normal/i386/EAGLView.o
collect2: ld returned 1 exit status
  ld: duplicate symbol _num_flight_vertices in /Users/varsha_vijay/Downloads/MusicCube/build/MusicCube.build/Debug-iphonesimulator/MusicCube.build/Objects-normal/i386/Flight.o and /Users/varsha_vijay/Downloads/MusicCube/build/MusicCube.build/Debug-iphonesimulator/MusicCube.build/Objects-normal/i386/EAGLView.o
  collect2: ld returned 1 exit status
Build failed (1 error)

Вот как организована моя программа.

1. Я определил c заголовочный файл vertices.h

#ifndef VERTICES_H
#define VERTICES_H
const int num_flight_vertices = 8;
#endif

2. Я импортирую этот заголовочный файл в мой класс Flight.h

#import "vertices.h"

@interface Flight : NSObject {

3. Я импортирую этот файл Flight.h в мой класс EAGLView.h

#import "vertices.h"
@interface EAGLView : UIView {
@private
Flight *flight;

когда я это создаю, я получаю сообщение об ошибке.

Может ли кто-нибудь помочь мне с этим.

Спасибо, VJ

1 Ответ

7 голосов
/ 20 июня 2010

Вы импортируете vertices.h куда-нибудь еще в вашем проекте?

Как правило, вы объявляете константы в заголовочном файле и определяете их в файле реализации, что позволяет избежать этой проблемы.Так что вы можете сделать это:

// vertices.h
#ifndef VERTICES_H
#define VERTICES_H
extern const int num_flight_vertices;
#endif

// vertices.c
#import vertices.h
const int num_flight_vertices = 8;
...