【问题标题】:Can't access std::move(...) C++ 11无法访问 std::move(...) C++ 11
【发布时间】:2023-03-22 10:32:01
【问题描述】:

我想在<utility> 中使用std::move 函数。所以我在我的代码顶部加上了一个包含这个和所有其他的。但是,当我使用 move 函数时,eclipse 会将其下划线为红色,并且不会编译。我知道我使用的是 c++ 11,因为我可以声明移动构造函数,但是,这不起作用。我正在使用 GCC 进行编译,并且使用了 -std=c++11 选项。我也把它放在我的链接器中。在此之前#include <utility> 不会出现。我需要包含其他内容吗?

这是基本问题。 std::move(...) 似乎没有定义。

#include <utility>
#include <vector>

int main()
{
    std::vector<int> v1;
    std::vector<int> v2;
    v1 = std::move(v2); // Function move could not be resolved.
    return 0;
}

还有我在编译器上设置的选项 -O3 -g3 -Wall -c -fmessage-length=0 -std=c++11

【问题讨论】:

  • 您要添加什么#includestd::move 包含在 &lt;utility&gt; 中。
  • 最好在您的问题中包含编译器错误的全文。
  • 你是否在eclipse项目设置中将-std=c++11添加到编译器参数? (或者偷偷地......只是对(T&&)进行强制转换......
  • 我在 GCC C++ 编译器中添加了 -std=c++11。在此之前,我在编写移动移动构造函数时遇到了构建错误。
  • 您有构建错误吗?或者您只有 Eclipse 下划线错误?

标签: c++ c++11


【解决方案1】:

您的代码没问题。但是你应该将你的 gcc 更新到最新版本。 Gcc 4.7.2 没有从 c++11 标准实现所有内容。

【讨论】:

【解决方案2】:

你确定没有定义吗?也许您的错误是在链接时导致链接器找不到库?

无论是这种情况,您都必须将库路径添加到您的eclipse项目设置以及包含路径。

我已经编译了您的示例,在生成的二进制文件上执行 ldd 后,我可以看到存在链接依赖关系,希望对您有所帮助:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 2014-09-30
    • 2014-01-17
    • 1970-01-01
    • 2015-11-21
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多