2010-04-09 3 views
0

내 iPhone 프로젝트에 추가하려는 C++ 라이브러리가 있습니다. 하나 개의 헤더 파일에서Objective-C++은 iPhone 용으로 컴파일되지만 시뮬레이터는 사용하지 않습니다.

나는

@interface a 
{ 
    cppvirtualclass V; 
} 

이 릴리스 설정으로 아이폰 장치에 대한 고급 컴파일을 선언합니다. 그러나 그것은 디버그 정보의 유무에 관계없이 시뮬레이터 용으로 컴파일을 거부합니다.

그것은이 밖으로 방법이 있나요 오류

error: type 'V' has virtual member functions. 

를 제공하거나 난 단지 콘크리트 C++ 클래스를 정의해야합니까?

+0

나는 그것이 유효한 구문이라고 생각하지 않습니다. '@ interface'를 의미합니까? – kennytm

+0

KennyTM에게 감사드립니다. –

답변

2

기본적으로 Objective C 객체를 만들 때 Objective C는 C++ 인스턴스 변수에서 생성자를 실행하지 않습니다. 이것은 (나는) C++ 객체의 vtable이 올바르게 초기화되지 않는다는 것을 의미합니다.

인스턴스 변수를 포인터로 만들고 init 메소드에 할당하고 dealloc/finalize에서 포인터를 삭제하십시오.

또는

시도 설정의 "통화 C++ 기본 Ctors/Ovjective-C에서 DTORS"대상 코드 생성 설정한다.

(GCC_OBJC_CALL_CXX_CDTORS, -fobjc - 통화 CXX-cdtors)

+0

나는 그 순간에 포인터 경로를 사용했는데, 그것은 왜 장치 코드가 (적어도) 컴파일되는지를 설명하지 못한다. –

+0

그 이유가 무엇인지에 대한 실마리가 없습니다. 다른 아키텍처의 대상 설정이 어떤 방식으로 다른가요? 두 빌드 모두에 대해 g ++ 호출 텍스트를 얻고 명령 행 스위치가 어떻게 다른지 살펴보십시오. – JeremyP

0

는 또한, 목표 - C++에서 더 이상 (4.0 기준) 아이폰 개발을위한 허용 된 언어입니다. Objective-C, C 및 C++을 사용할 수 있지만 Objective-C++는 사용할 수 없습니다.

+1

이것은이 문장의 흥미로운 해석입니다. – kennytm

+0

정말요?! 그들은 어떻게 Objective-C++ 프로그램과 (Objective-C, C++) 프로그램을 구별 할 계획입니까? –

+0

허용되는 언어 목록은 Objective-C, C 및 C++ (웹 응용 프로그램의 경우 javacript)입니다. Objective-C++가 해당 목록에 없습니다. 차별화에 관해서는 nm 출력에 충분한 심볼이 있다고 확신합니다. 예 : .cxx_construct는 ObjC++ 바이너리에서만 나타납니다. 그들이 그것을 강요하든, 아니면 단지 합법적 인 헛소리인지 ... 누가 압니다. – Frank

관련 문제