2014-07-25 3 views
0

C++ 코드와 클래스 선언을 가진 .mm 파일이 있습니다. 다른 .m 파일에 포함 시키길 원하지만 컴파일러가 다른 클래스에서 에러를 내기 시작합니다 알 수없는 유형 이름 'class'; '클래스'를 의미 했습니까?mm 파일을 m 파일에 포함하십시오.

.m 파일은 이미 .mm 파일에 포함되어 있습니다.

A.mm 예컨대

A.h이 ->이 클래스는 "B.h"

B.h을 인클루드하고있다 -> 사용법 #include "A.h"나는 A.h을 가져올 때 오류가 있습니다.

B.m -> A.h 가져 오기를 시도하면 #hinclude 오류가 발생합니다.

.m 파일에서 구조체를 사용해 보았지만 인스턴스에서 메서드가 호출되지 않았습니다.

도움을 주시면 감사하겠습니다.

+0

.m 또는 .mm 파일을 다른 파일에 포함하는 것이 거의 없습니다. 정기적 인 C에서 .c를 포함하는 것과 같습니다. 매우 특별한 경우에 수행되지만, "정상적인"상황에서 수행하려고하면 잘못된 결과가 발생합니다. 이것이 .h 파일이있는 이유입니다. (그리고 Objective-C로 프로그래밍하면 안된다는 것을 알지 못한다면 평범한 구식 C를 먼저 배워야합니다.) –

+0

... Objective-C는 C++을 이해하지 못하기 때문에 특이한 기법 일뿐만 아니라, 그것은 시간 낭비입니다. – trojanfoe

+0

C++가 포함되어 있으면 .m은 .mm 헤더를 포함 할 수 없습니다. 포함하려면 objc 전용 헤더를 만들고 .mm 또는 다른 .h에 C++ 부분을 유지해야합니다. – escrafford

답변

1

정말로 무엇을하려고합니까? 소스 파일 내에서 소스 파일을 포함시키려는 시도는 매우 드문 일이며 일반적으로 프로그램 아키텍처에서 잘못된 점이 있습니다.

일반적으로 .m 및 .mm 파일에 대한 헤더와 구현 파일이 있어야합니다. ObjC 클래스 선언을 기본 헤더에 포함하지 않으려면 (예 : 프레임 워크를 구현하고 있고이 헤더가 프레임 워크의 공용 API이기 때문에) 여러 헤더를 가질 수도 있습니다. 예 : 당신은 MyClass.h와 MyClassPrivate.h를 가질 수 있고, 오직 두번째 것이 포함될 수 있습니다.

ObjC 파일에서 .mm의 헤더를 사용하기 위해 일반 ObjC (ObjC++가 사용하는 것)에서 실제로 C++을 사용할 수 없습니다. ObjC 부분 ( 사용)과 C++ 부분으로 분할하지 않는 한. 몇몇 헤더에서. 이 스레드에서 내 대답 보면 ++ 직선 ObjC와 ObjC 혼합에 대한 추가 정보를 원하시면

: Can I separate C++ main function and classes from Objective-C and/or C routines at compile and link?

나는 또한 내가 함께 C++ 및 ObjC를 사용하는 변덕에 더 많은 세부 사항으로 이동 팟 캐스트 에피소드를했다 : http://nsbrief.com/113-uli-kusterer/ 특히, 컴파일 단위가 무엇인지 확실하게 확인하십시오. 그렇지 않으면 ObjC의 C++ 또는 (Obj) C++ 헤더의 ObjC 헤더를 포함하여 항상 문제가 발생할 것입니다.

관련 문제