2015-01-11 5 views
0

파일 CarArray에서 (확장자없이) 내가 (이것은 매우 단순화 된 버전이다) 같은 배열을 가지고 :엑스 코드 : 목표 C : 중복 기호 오류

NSString *cars[5][3] = { 
    {@"1A", @"1B", @"1C"}, 
    {@"2A", @"2B", @"2C"}, 
    {@"3A", @"3B", @"3C"}, 
    {@"4A", @"4B", @"4C"}, 
    {@"5A", @"5B", @"5C"} 
} 

지금 나는에서 데이터를 읽을 수 배열을 여러 파일에 간단하게 사용하십시오 #import "CarArray"

그리고 루프를 사용하여 데이터를 읽습니다. 그런 다음 오류가 발생합니다.

duplicate symbol _cars in: 
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/DetailViewController.o 
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/ModelListViewController.o 
ld: 1 duplicate symbol for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

어떻게 해결할 수 있습니까?

답변

5

Now I want to read the data from the array in multiple files so I simply use #import "CarArray"

파일을 두 번 이상 사용할 때 여러 정의가 만들어 지므로이 방법은 여러 위치에서 배열 데이터에 액세스하는 잘못된 방법입니다.

하나의 선언과 헤더를 제공 할 것입니다 배열을 공유하는 방법, 및 구현과 함께하는 .m 파일 :

CarArray.h :

extern NSString *cars[5][3]; 

CarArray.m :

#import "CarArray.h" 

NSString *cars[5][3] = { 
    {@"1A", @"1B", @"1C"}, 
    {@"2A", @"2B", @"2C"}, 
    {@"3A", @"3B", @"3C"}, 
    {@"4A", @"4B", @"4C"}, 
    {@"5A", @"5B", @"5C"} 
} 

cars을 사용하려는 파일에 #import "CarArray.h"을 사용하십시오.

또 다른 대안은 전역 변수를 래핑하고 배열에 액세스하기위한 클래스 메소드를 제공하는 클래스를 작성하는 것입니다.

0

당신은 정의 헤더 파일 ("CarArray.h")하지만 에서 배열을 선언하고 별도의 구현 파일 ("CarArray.m")의 값으로를 초기화해야한다.