2012-04-26 1 views
14

XCode에 포함되지 않은 컴파일 오류가 발생합니다. Objective-c 및 C++을 혼합하여 사용하는 iOS 앱 프로젝트가 있습니다.포함 <string>을 찾을 수 없습니다. Xcode 4.2에서 컴파일 오류가 발생했습니다.

처음에는 ios 프로젝트에서 하나의 .h 파일과 .cpp 파일을 만들었습니다. 그런 다음 .cpp 파일의 이름을 .mm 파일로 변경했습니다.

내 .h 파일입니다.

TestLog.h

#ifndef CalculatorDemo_TestLog_h 
#define CalculatorDemo_TestLog_h 
#include <string> 
using namespace std; 

class TestLog 
{ 
private: 
    string logString; 
public: 
    void Log(string logMessage); 
}; 


#endif 

TestLog.mm

#include "TestLog.h" 

void TestLog::Log(string logMessage) 
{ 
    //this->logString->append(logMessage); 

} 

나는 무엇을 놓치고? 타겟에 std C++ 라이브러리를 추가해야합니까? 검색 헤더 경로와 관련된 것이 있습니까?

문자열 유형 만 사용해야합니다.

미리 감사드립니다.

+0

확실히 * 작동해야합니다. *하지만 NSString을 사용하지 않는 이유가 있습니까? –

+0

기본적으로 XCode에는 표준 경로가 포함되어 있지 않으므로 수동으로해야합니다. 또한 .h 파일을 사용하여 구현 파일에서 사용하거나 사용하지 마십시오. – AlexTheo

답변

4
+0

C++ 코드 (및 표준 C++ 라이브러리)를 사용해야하는 응용 프로그램의 경우 반드시 읽어야합니다! 오히려이 대답을 발견하기가 어렵지만, 그것은 두 번 이상 나를 도왔습니다! 감사! : D – javatarz

+1

이 스레드에서 문제에 대한 설명을 환영합니다. – AbiusX

+1

많은 (일부 사용 불가) 답변이있는 포럼에 썩을 수있는 링크를 게시하는 대신 답변에 질문에 답하십시오. –

1

저는 전체 경로를 라이브러리에 포함해야한다고 생각합니다. "기초"& "uiview"프레임 워크와 유사합니다.

#import <Foundation/Foundation.h> 

또는

#import <UIKit/UIKit.h> 

그래, 당신이 당신의 목표에 라이브러리를 추가해야합니다.

5

선택 프로젝트 -> 설정 구축 -> 사과 LLVM 컴파일러 5.1 - 특질있다> 언어

Objective-C++

2

-Compile Sources As 변화에 Xcode에서. 나는 7.3에서 그것을 알아 차렸다. 대부분의 프로젝트는 .mm 파일과 STL을 인식하지만, 한 프로젝트는 그렇지 않았습니다. 바로 가기 왼쪽 프로젝트 아이콘을 클릭하고 대상> 빌드 단계> 라이브러리와 이진 파일 연결>을 클릭하고 AppKit.framework를 추가해야한다는 수정이있었습니다. 그런 다음 대상> 빌드 설정> "컴파일 소스"를 클릭하고 가능한 모든 열에 대해 "Objective C++"로 설정해야했습니다. 그런 다음 제품 메뉴에서 정리 및 빌드를 수행하십시오. 이것은 적절하게 컴파일됩니다. 그런 다음 컴파일 소스로 다시 돌아가서 가능한 모든 열의 "파일 유형에 따라"로 다시 설정하십시오. 그런 다음 제품 메뉴에서 다시 빌드를 클릭하십시오. 이 시점에서 제대로 컴파일되어 "파일 유형에 따라"옵션을 사용할 수있게되었습니다.

아, 그리고 코코아 물건을 경우, 파일에 다음과 같은 헤더를 추가하는 것을 잊지 마세요 :

#import <Cocoa/Cocoa.h> 

을 그리고 명령 줄 물건을 경우의 다음 대신을 추가하는 것을 잊지 마세요 코코아 헤더 :

#import <Foundation/Foundation.h> 
+0

대단한 답변입니다! 고맙습니다! 나는 내 마음을 잃고 있다고 생각 ... 내 xcode를 7에서 8로 업그레이드했고 갑자기 내 C++ 코드가 인식되지 못했습니다 ... 감사합니다! – NpC0mpl3t3

0

그래서이 문제는 Cocoapods 라이브러리 바이 패스에서 발생했으며 이러한 해결책 중 아무 것도 수행하지 않았습니다. 문제는 Cocoapods가 만든 우산 헤더 파일입니다. 이것은 <POD_NAME>/Support Files/<POD_NAME>-umbrella.h에 있습니다. 삭제하면 잘 작성됩니다.

이제 이것이 필요한 이유에 대해 설명합니다. 우산 헤더는 C++ 및 Objective-C 코드를 헤더에 직접 섞어 놓았습니다. 헤더는 큰 노우물이 아니며 C++ 가져 오기를 완전히 깨뜨립니다. 그것을 제거함으로써 (어떤 효과가없는 것 같습니까?) 코코아 포드가 모르고 창조 한이 상충되는 수입은 사라질 것입니다.

관련 문제