C++0x компилируется, но затмевает ошибки редактора даже при обнаружении -gnu++0x
Я использую некоторый код, чтобы сообщить о длительности задачи, используя std::chrono::high_resolution_clock ... часть C++0x.
Я могу успешно скомпилировать функции C++ 0x в eclipse cdt, используя флаг -gnu++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
2 ответа
Для хроно в затмении вы должны добавить эти символы
_GLIBCXX_USE_C99_STDINT_TR1
а также
__cplusplus = 201103L
Как их добавить:
Свойства объекта -> Общие сведения о C/C++ -> Путь и символы -> Символы (вкладка) -> GNU C++ -> и нажмите кнопку Добавить.
Не забудьте добавить __cplusplus
со значением 201103L
У Eclipse есть свой собственный парсер. Этот синтаксический анализатор не может работать с функциями C++11 (C++0x). Поэтому вам нужно подождать, пока поддержка C++ 11 в анализаторе eclipse будет готова.