Eclipse CDT无法解析std:array,std :: vector工作正常

时间:2017-10-12 08:31:06

标签: c++ eclipse c++11 eclipse-cdt stdarray

我面临很多red crossesSymbol 'array' could not be resolved,代码正在建设中。

#include <math.h>
#include <array>
#include <sstream>
#include <string>

static std::string printArray(std::array<double, 3> data) {
  std::ostringstream strs;
  strs << "( " << data[0] << " " << data[1] << " " << data[2] << " )";
  return strs.str();
}

static std::string printVector(std::vector<double> data) {
  std::ostringstream strs;
  strs << "( " ;
  for (const auto & value : data )
      strs << value << " ";
  strs << " )";
  return strs.str();
}

使用-std=c++11下的C/C++ General -> Preposcessor Include Path, Macros etc. -> Porvides -> CDT GCC Built-in Compiler Settings标记激活了c ++ 11功能,如herehere所述。

我的问题没有重复,因为它适用于std::vector,并且正确处理了其他c ++ 11功能。

按F3即可解析标题(#include <array>)。

我正在使用Eclipse CDT版本:Neon.3 Release(4.6.3)。

2 个答案:

答案 0 :(得分:0)

问题是符号__cplusplus的值不是201103L。

要更改此设置,您需要

  • 修改Project->Preferences->C/C++ General/C/C+ General->Paths and Symbols->GNU C++->Symbols添加定义__cplusplus并将值设置为201103L setzen。

  • Window->Preferences->C/C++/Build/Settings/Discovery/CDT GCC Build-in Compiler Settings das Argument下添加“-std = c ++ 11”der命令行hinzufügen

  • 在所有条目的Project->Preferences->C/C++ General/C/C++ General/Path and Symbols->Providers下激活复选框Use global provider shared between projects

答案 1 :(得分:0)

我有OP报告的完全相同的症状:

  • 我以前已经应用了“ -std = c ++ 11”修复程序,以使诸如“ unique_ptr”的现代C ++语法能够正常工作。
  • std :: vector和其他std模板内容可以正确解析。
  • 我有#include <array>,F3成功导航到阵列头文件。

我尝试了schorsch312提供的解决方案,并且可行,除了提供的步骤与我的Eclipse的Neon版本(与OP使用的版本相同)不完全一致。因此,我不得不稍微调整说明。这是对我有用的东西:

  1. 选择项目->属性-> C / C ++常规-> C / C ++路径和符号->符号
  2. 在该页面的“语言”下,选择GNU C ++
  3. 添加...
    • 名称:__cplusplus
    • 值:201103L
  4. 检查:添加到所有配置
  5. 应用/确定。

选择项目-> C / C +索引->重建-如果该操作未自动触发。

现在,eclipse可以正确解析对数组的引用。请注意,此解决方案假定您以前已解决了使c ++ 11语法正常工作的普遍问题。