gpt4 book ai didi

c++ - std::在 eclipse 中移动无效参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:31 25 4
gpt4 key购买 nike

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

但是当我试图编译这段代码时,错误发生了

enter image description here

#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的console窗口好像是编译成功了,如下图

enter image description here

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

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

这是成功的并且有效。

eclipse 有什么问题?

我正在使用 eclipse 3.8 版

最佳答案

您从 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如果这不起作用,可以重新编制索引。

关于c++ - std::在 eclipse 中移动无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com