【问题标题】:std::move invalid argument in ecpliseeclipse中的std :: move无效参数
【发布时间】:2014-07-25 07:36:23
【问题描述】:

我正在用这个简单的例子测试 std::move

但是当我尝试编译这段代码时,出现了错误

#include <utility>      // std::move
#include <iostream>     // std::cout
#include <vector>       // std::vector
#include <string>       // std::string

int main () {
  std::string foo = "foo-string";
  std::string bar = "bar-string";
  std::vector<std::string> myvector;

  myvector.push_back (foo);                    // copies
  myvector.push_back (std::move(bar));         // moves

  std::cout << "myvector contains:";
  for (std::string& x:myvector) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

但eclipse中的控制台窗口似乎说编译成功,如下所示

所以我尝试使用控制台命令而不是 eclipse 来检查什么是正确的

g++ -D__GXX_EXPERIMENTAL_CXX0X__ -std=c++11 test.cpp

这很成功并且有效。

eclipse有什么问题?

我使用的是 eclipse 3.8 版

【问题讨论】:

  • 你的意思是eclipse的内部解析器(相当于Visual的intelisense)显示错误,而普通编译器不显示错误?
  • 是的,好像是这样

标签: c++ eclipse c++11


【解决方案1】:

您从 Eclipse CDT 的代码分析中得到错误,而不是来自您的编译器。代码分析可能很有用,但设置起来可能很挑剔,而且因为它涉及 Eclipse 进行自己的(有限的)C++ 解析,它并不总是与真正的编译器一致。 (“类型”列中的“语义错误”表明它是代码分析错误。实际的编译器错误被列为“C/C++ 错误”。)

代码分析错误是无害的——正如您所见,它们不会影响编译。为了使代码分析工作,Eclipse 执行“发现”——它调用 GCC 本身并解析输出以确定预处理器定义、包含路径等内容。很有可能你的 Eclipse 在发现时没有启用 C++11 .修复它在某种程度上取决于您的系统和 Eclipse 版本;这是我修复它的方法:

  1. 进入 Windows、首选项、C/C++、构建、设置。
  2. 在“发现”选项卡下,选择“CDT GCC 内置编译器设置 [共享]”。
  3. -std=c++11 添加到“获取编译器规范的命令”的末尾。
  4. 单击应用。单击确定。
  5. 之后您可能需要重新索引;见下文。

在最新的 Eclipse 中,如果您让 Eclipse 管理您的 C++ 设置而不是编写自己的 makefile,那么作为@user3159253 says,您可以使用toolchain support 而不是手动编辑编译器设置。

这里有一些其他的尝试。

  • 确保您运行的是最新的 Eclipse 和 Eclipse CDT。 C++11 并没有那么那么老,而且 Eclipse CDT 每年都会有重大的更新,尤其是代码分析很复杂,需要你能找到的最新代码。
  • 重建索引有时会有所帮助:右键单击您的项目,进入索引下,然后选择重建。如果这不起作用,More drastic approaches 可以重新索引。

【讨论】:

    【解决方案2】:

    我猜想 Eclipse 调用的 gcc 没有收到 -std=c++11 参数。如果您有现代 CDT,请查看此页面:http://wiki.eclipse.org/CDT/User/NewIn83#Toolchains 如果没有,请按照 @JoshKelley 的建议进行操作

    【讨论】:

    • 我认为工具链选项只适用于 Eclipse 管理的项目;至少,我无法让它为 makefile 项目工作。
    • 听起来很合理。如果 Makefile 存在,那么所有工具链操作都应该在那里执行。
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2014-09-17
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2019-01-25
    • 2014-09-30
    • 2017-05-07
    相关资源
    最近更新 更多