2011-08-31 68 views
2

所以,在我的VS2010我可以这样进行编译代码:C++ linux:错误:'移动'不是'标准'的成员如何解决它?

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和Linux ......但标准::移动它给error: ‘move’ is not a member of ‘std’。在VS2010上它不需要任何特殊的头文件。所以我想知道它在Linux上需要哪个头文件,并且它是否在STD中?如果没有如何解决它与提升或什么?

+1

相关:[什么std :: move()是?](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我也得''包括'摆脱这个错误。 – Nebril

+0

谢谢,-std = C++ 11是解决方案。令人惊讶的是,C++ 11并不是Ubuntu 16.04LTS的默认编译器 – Sammy

1

您正在使用最新的Visual Studio,但不是最新的GCC。 std :: move功能在最新的GCC中可用。这是C++ 11的一个新功能。

-1

你不能使用std::move,因为你的编译器不支持C++ 11。

相关问题