首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++名称空间“隐藏”出现在Eclipse解析器中

C++名称空间“隐藏”出现在Eclipse解析器中
EN

Stack Overflow用户
提问于 2015-11-02 10:25:21
回答 1查看 1.1K关注 0票数 1

最近,我正在开发一个项目,使用C++作为编程语言,Eclipse作为编程环境。“Chrono”库用于该项目。

我试图为不同的时间尺度(如纳秒)定义"<<“流操作符,方法是将定义放在与时间相同的名称空间中,即"std:: chrono”。头文件(Test.hpp)代码的一个小示例如下所示:

代码语言:javascript
复制
#include <chrono>
#include <iostream>

namespace test{ namespace chrono{
  typedef std::chrono::nanoseconds  nanoseconds;
}}

namespace std{ namespace chrono{
  inline std::ostream& operator<<(std::ostream& s, nanoseconds dur)
  {
     return s << dur.count() << "ns";
  }
}} 

以上代码和项目的其他部分可以正确编译。但是,IDE Eclipse一直抱怨"Type‘std::chrono::nanosec秒’无法解析“,自动完成功能对名称空间"std::chrono”中的任何成员变量/函数都说“没有默认建议”。看起来,将新函数添加到这个头文件中的"std::chrono“命名空间中,会从Eclipse的角度”隐藏“其他内容。

问题是,在Eclipse中导致这种“错误”消息的原因是什么,或者这是我编程中的一个缺陷?我很感谢你的任何帮助或暗示。

我还将代码复制到膝上型计算机上的Xcode中,没有像Eclipse那样的错误消息。

附加信息

我所使用的操作系统是Mac,因此时间库与答案中提到的稍有不同。“chrono.hpp”的截图如下:

实际上,我的CDT在名称空间‘std::chrono:’中没有找到成员的问题。让我困惑的是,当我在名称空间'std::chrono::‘中添加/重写成员时,CDT的行为。见以下图片:

当我重写命名空间中的成员函数时出现错误:

当我对命名空间不做任何操作时,错误不会出现:

知道如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-03 16:44:17

关于你的设置的假设

我相信您已经将构建设置更改为使用-std=c++0x或类似于时间记录库所需的内容。

也许你是这样做的:

chrono (头文件)的顶部有如下所示:

代码语言:javascript
复制
#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else

因此,如果您没有足够的新C++标准,您将得到一个编译错误。

现在的问题是CDT索引器,它用于生成突出显示,代码完成不知道您正在使用__cplusplus >= 201103L。您可以在下面的屏幕截图中看到这一点,即大多数chrono是不活动的,因为__cplusplus是错误的值。

此屏幕截图显示不正确的值和CDT标识的错误:

如果你尝试并完成代码,你也会得到错误的东西:

如何修复它

要解决这个问题,您需要告诉CDT,您的项目使用了与默认GCC设置不同的GCC设置。也就是说,由于标准的不同,__cplusplus尤其具有错误的值。

  1. 在Properties中,选择C/C++ General -> Preprocessor Includes,然后选择Providers选项卡。
  2. 选择CDT GCC Built-in Compiler Settings
  3. 取消选中Use global provider shared between projects
  4. 按OK

下面是一个截图,它看起来是什么样子的:

一旦您这样做,您应该在编辑器中看到chrono的非活动部分变得正确:

但你的源文件可能还是错的。然后重新生成要更新的索引,右键单击项目,选择Index -> Rebuild

最后,您的代码不应该正确显示:

而且完整的代码也应该是有效的!

历史

在这种情况下,CDT的右手和左手不一致。从历史上看,我认为原因在于性能和放弃索引编译器/用户选项的每一种可能的变体,而不是在工作空间中拥有一些可能对某些项目不合适的共享数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33475411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档