우분투 12 Linux에서 Objective-C 코드를 컴파일하려고합니다.오류 : Linux에서 Objective-C로 컴파일 할 때 'struct StructName'메시지를 다시 정의하십시오.
main.m은 다음과 같습니다 : 나는
gcc main.m `gnustep-config --objc-flags` -lgnustep-base -o main.bin
내가받을 컴파일에 갈 때
struct StructName{ // line 86
BOOL first;
...
...
};
@interface StructName :NSObject // line 92
BOOL first; // line 93
...
...
@end // 96
:
CEFoo.h에서#import <Foundation/Foundation.h>
#import "CEFoo/CEFoo.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool drain];
return 0;
}
, 나는 정의가 이 메시지 :
Foo/CEFoo.h:93:1: error: redefinition of ‘struct StructName’
Foo/CEFoo.h:86:8: note: originally defined here
구조체를 두 번 재정의하거나 가져 오기 대신 include를 사용하는 경우 재귀 적 가져 오기를 수행하면이 문제가 발생할 수 있습니다.
grep -r "struct StructName" *
정의가 한 번만 나타납니다.
또한 프로젝트의 모든 include 문을 검색했으며 include vs import 또는 명시 적으로 CEFoo.h의 이중 포함/가져 오기를 사용하지 않았 음을 발견했습니다 (정의/가져 오기중인 구조를 포함하는 파일 두 번 이상).
내가 어떻게이 문제의 원인을 추적 할 수 있습니까? 나는 그것을 두 번 가져 오는 것으로 가정합니다. 제가 있다면, 처음에 정의 된 자세한 정보 나 로그를 통해 볼 수있는 방법이 있습니까?
다른 문제 해결 방법은 무엇입니까? 클래스를 정의 TIA
CEFoo.h, 특히 오류가 발생한 93 행을 더 많이 볼 수 있습니다. – Darren
또한이 특별한 경우에는 관련이 없을지라도 미래에 'gnustep'태그를 질문에 추가 할 수 있습니다. – andyvn22
@Darren 코드 예제를 86-92 행으로 편집했습니다. TIA – Geremy