2009-08-10 2 views
4

C++ 라이브러리에서 제공하는 기능을 사용하는 Objective-C/C++ 응용 프로그램이 있습니다.Objective-C 및 C++ 코드 혼합

class TheClass 
{ 
public: 
[...] 

enum TheEnum 
{ 
    YES, 
    NO, 
}; 

[...] 
}; 

포함하여 (즉 matters- -if 사용 # import에) 오브젝티브 C/C의 상기 클래스 선언 헤더 파일 ++ 소스 파일 다음 C++ 클래스

하나는 이런 열거 포함 (* .mm)은 "(BOOL) 1"("(BOOL) 0"과 마찬가지로 "NO")로 전 처리기가 "YES"를 대체하므로 컴파일이 실패하게됩니다.

열거 형 값의 이름을 바꾸지 않고 문제를 해결할 수 있습니까?

답변

5

YES and NO are predefined constants는 objc.h 헤더에 선언했다.

당신은 "YES"와 "NO"매크로의가. 이것은 수행 할 수있는 확장 전처리을 방지 할 수 있어야한다 당신이 식별자로 언어 키워드를 사용하는 경우 로컬 #undeffing 그들.

그러나 기술적으로, 당신은 문제를 예상 할 수 있습니다. 당신은 회원이 MAX_PATH라고 포함하는 클래스를 작성하지 않을 것입니다 당신을?

-1

#import 중요 - Objective-C++ 소스 파일의 C++ 헤더는 #include과 함께 포함되어야합니다. 100 % 확실하지는 않지만 include 지시문 ( #include#import)의 선택에 따라 사용되는 전처리 기가 결정됩니다.

또한 기본적으로 있기 때문에, 열거 형의 상수의 선언을 반대 할 수는, 열거의 구성원 인 코멘트 0

부터 정수와 연관된, 내가 틀렸다. 열거 형을 다시 써야 할 것처럼 보입니다. 죄송합니다 :(

목표 - C에서
+0

YES와 NO Objective-C에서 정의 된 매크로이므로 식별자를 식별자로 사용할 수 없습니다. – xtofl

+0

좋아요, 그렇다면 선언의 순서를 바꾸지 않으시겠습니까? –

+0

#import는 MIDL 컴파일러가 가져 오기 라이브러리의 C++ 표현을 포함하는 헤더 파일을 생성하도록합니다.이 헤더 파일은 이후에 전 처리기로 #include됩니다. – xtofl