2011-08-31 2 views
2

그래서 내 VS2010에 내가 좋아하는 코드를 컴파일 할 수C++ linux : 오류 : 'move'는 'std'의 멤버가 아닙니다. 어떻게해야합니까?

boost::shared_ptr<boost::thread> internal_thread; 
boost::packaged_task<void> internal_task_w(boost::bind(&thread_pool::internal_run, this, internal_thread)); 
internal_thread = boost::shared_ptr<boost::thread>(new boost::thread(std::move(internal_task_w))); 

처음 2 개 라인 부스트 1.47.0와 리눅스로 확인됩니다 ...하지만 표준에이 error: ‘move’ is not a member of ‘std’을 제공 이동 ::. VS2010에서는 특별한 헤더가 필요 없습니다. 그래서 나는 리눅스에서 어떤 헤더가 필요한지 의문스럽고 어쨌든 그것의 성병에 있는가? 부스트 등으로 주위를 둘러 보는 방법이 아니라면?

+1

관련 항목 : [What std :: move() is?] (http://stackoverflow.com/questions/3413470/what-stdmove-is) – Vache

+1

"어떤 헤더"비트에 대답하려면 '' , 그러나 당신은 다른 많은 표준 헤더들이 주어진 구현에서이를 포함하고 있다는 것을 발견 할 수있다. 따라서 특별한 헤더를 필요로하지 않는다는 인상을 받는다. –

답변

14

g ++을 C++ 11 (또는 C++ 0x) 모드로 전환하려면 < = 4.6 버전의 명령 줄 매개 변수 -std=c++0x을 추가해야합니다. 요즘은 -std=c++11을 사용할 수도 있습니다.

+4

gcc 4.7.3에서이 오류를 없애기 위해서'#include '도해야했습니다. – Nebril

+0

감사합니다. -std = C++ 11이 해결책입니다. 놀랍게도, C++ 11은 우분투 16.04LTS의 기본 컴파일러가 아닙니다. – Sammy

1

가장 최근의 Visual Studio는 사용하고 있지만 최신 GCC는 사용하고 있지 않습니다. std :: move 기능은 가장 최근의 GCC에서 사용할 수 있습니다. C++ 11의 새로운 기능입니다.

-1

컴파일러가 C++ 11을 지원하지 않기 때문에 std::move을 사용할 수 없습니다.

관련 문제