问题 c ++ 0x编译,但即使使用-gnu ++ 0x发现也会出现eclipse编辑器错误


我使用一些代码来报告任务的持续时间使用std :: chrono :: high_resolution_clock ... c ++ 0x的一部分。

我可以使用-gnu ++ 0x标志在eclipse cdt中成功编译c ++ 0x特性。虽然成功编译,但编辑器似乎没有意识到c ++ 0x,即它在我的代码中显示了任何c ++ 0x特性的错误。我通过在项目发现选项中添加-gnu ++ 0x标志来解决这个问题。注意:在您执行另一次编译并重建索引之前,不显示已修复...

-E -P -v -dD“$ {plugin_state_location} /specs.cpp”-std = gnu ++ 0x

我仍然有一个最后一个编辑器错误,我无法摆脱“符号'duration_cast'无法解决”(我有一张照片,但新用户无法发布照片)

任何人有任何想法如何解决这个问题?这是代码:

#ifndef _scoped_timer_h_
#define _scoped_timer_h_

#include <iostream>
#include <chrono>
#include "boost/noncopyable.hpp"
#include "boost/format.hpp"

using namespace std::chrono;

  // Utility class for timing and logging rates
// (ie "things-per-second").
// NB _any_ destructor invokation (including early return
// from a function or exception throw) will trigger an
// output which will assume that whatever is being measured
// has completed successfully and fully.
class scoped_timer : boost::noncopyable
{
public:


  scoped_timer(
    const std::string& what,
    const std::string& units,
    double n
  )
    :_what(what)
    ,_units(units)
    ,_how_many(n)
    ,_start(high_resolution_clock::now())
  {}

  ~scoped_timer() {
    high_resolution_clock::time_point stop = high_resolution_clock::now();
    const double t = 1e-9 * duration_cast<nanoseconds>(stop-_start).count();
    std::cout << (
      boost::format(
        "%1%: %|2$-5.3g| %|3$|/s (%|4$-5.3g|s)"
      ) % _what % (_how_many/t) % _units % t
    ) << std::endl;
  }

private:

  const std::string _what;
  const std::string _units;
  const double _how_many;
  const high_resolution_clock::time_point _start;
};

#endif

10277
2018-01-06 20:19


起源

可能重复 使用Eclipse构建c ++ 0x功能 - ildjarn
在我的情况下,我已将“-std = c ++ 0x”添加到项目 - >属性 - > C ++ - 构建[设置] - > G ++编译器[miscellanous] - >其他标志。我已经检查过,包含路径中只有一个“chrono”文件。打开声明时,例如按<chrono>上的F3,打开正确的文件并具有duration_cast的定义。我还注意到自动完成没有看到'duration_cast',但是从'chrono'标题中看到了我需要的所有其他内容。 - Rob Lorimer
您使用的是什么版本的Eclipse / CDT? - ildjarn
indigo sr1 with cdt 8.0.0.201109151620。 - Rob Lorimer
通过将-std = gnu ++ 0x添加到发现选项,我的项目路径和符号中添加了一些新符号(在构建和索引更新之后),例如 GXX_EXPERIMENTAL_CXX0X。这修复了一个初始编辑器错误,指出无法解析std :: chrono(即使编译好的文件) - Rob Lorimer


答案:


对于日食中的计时器,你应该添加这些符号

_GLIBCXX_USE_C99_STDINT_TR1

__cplusplus = 201103L

如何添加它们:

Prject properties - > C / C ++ General - > Path and Symbols - > Symbols(Tab) - > GNU C ++ - >点击添加。

记得加 __cplusplus 有价值的 201103L


8
2018-04-14 10:45



那很有效。谢谢! - Florian
这是有效的,谢谢。也许你可以考虑解释它在做什么,让我们更有意义? - MeM


Eclipse拥有自己的解析器。该解析器无法处理c ++ 11(C ++ 0x)功能。所以你必须等到eclipse解析器中的c ++ 11支持准备就绪。


3
2017-12-26 12:35



你知道什么时候准备好吗? - andrew
我想它永远不会准备好。如果我是CDT开发人员,我会选择使用clang。但这是一个本机库而不是Java,所以这不是一个真正的选择。 - Kocka