C++ linux:错误:“移动”不是“std”的成员;如何绕过它?
因此,在我的 VS2010 上,我可以编译如下代码:
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 行在 boost 1.47.0 和 linux 上都可以...但在 std::move 上它给出 error: 'move' is not a member of 'std'< /代码>。在 VS2010 上它不需要任何特殊的标头。所以我想知道它在 Linux 上需要哪个标头,并且它是否在其 STD 中?如果不是,如何通过提升或其他方式绕过它?
So on my VS2010 I can compile code like :
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)));
first 2 lines are ok with boost 1.47.0 and linux... but on std::move it gives error: ‘move’ is not a member of ‘std’
. On VS2010 it does not require any special header. So I wonder which header it requires on linux and is it in its STD anyway? If not how to get around it with boost or something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要让 g++ 进入 C++11(或 C++0x)模式,您必须在 <= 4.6 版本上添加命令行参数
-std=c++0x
,现在您可以还可以使用-std=c++11
。To get g++ into C++11 (or C++0x) mode, you have to add the command-line parameter
-std=c++0x
on versions <= 4.6, nowadays you can also use-std=c++11
.您使用的是最新的 Visual Studio,但不是最新的 GCC。 std::move 功能在最新的 GCC 中可用。它是C++11的新特性。
You are using the most recent Visual Studio, but not the most recent GCC. The std::move capability is available in the most recent GCC. It is a new feature of C++11.
您不能使用
std::move
因为您的编译器不支持 c++11。You can't use
std::move
because your compiler does not support c++11.