2014-06-30 8 views
0
예를 들어

,이 노력하고있어 :C++ 11과 TR1 사이에서 전환하기위한이 전처리 매크로가 작동하지 않는 이유는 무엇입니까?

#if __cplusplus >= 201103L 
#include <unordered_set> 
typedef std::unordered_set<std::string> UnorderedStringSet; 
#else 
#include <tr1/unordered_set> 
typedef std::tr1::unordered_set<std::string> UnorderedStringSet; 
#endif 

그것은에 대한 확인 작업 C++ TR1에 CentOS 5.6, 그리고 C++ 11 인식 엑스 코드 (독불 장군)의 내 작품을 좋아하지만에 실패 할 것 C + 11 Mac OS (mavericks)의 명령 행.

편집 분명히 C++ 11 컴파일러에서는 실패합니다. 또는 이 C++ 11 컴파일러 여야합니다. 어쩌면 그게 문제 야.

오류 :

MyFile.cpp fatal error: 'tr1/unordered_set' file not found 

은 분명히 제대로> = 201103L __cplusplus의 #if을 평가하지 않습니다.

컴파일러 인수 :

g++ -I. -I/snipped - -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /Users/xxxxx/src/MyFile.cpp -fno-common -DPIC -o src/.libs/MyFile.o 

컴파일러 버전 :

$ g++ --version 
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.2.0 
Thread model: posix 

것은 무엇 잘못 될 수 있을까? 그리고 아마도 더 좋은 방법이 있을까요?

+4

"오류가 발생했습니다"라는 오류에 대해 자세히 설명해주십시오. – 101010

+0

어떤 컴파일러를 사용하고 있습니까? 및 컴파일러 플래그 –

+0

TR1은 모든 사전 -C++ 11 컴파일러에서 사용할 수 있다고 보장 할 수 없습니다. 더 많은 컴파일러 관련 작업을 수행하거나 제 3 자 구현 (예 : 부스트)을 수행해야 할 수도 있습니다. – Cogwheel

답변

2

실제로 C++ 11로 컴파일하지 않습니다. g ++에 -std=c++11을 전달해야합니다.