尝试强制转换std :: chrono :: duration给出" rep不能是持续时间"编译错误

时间:2017-08-14 23:59:05

标签: c++ casting chrono

我确实在这里做了一些蠢事,但是我在编写简单的秒表课时遇到了麻烦。错误是:

  

/ usr / include / c ++ / 4.9 / chrono:246:2:错误:静态断言失败:rep   不能是一个持续时间

我想将两个std :: chrono :: high_resolution_clock之间的时间差异转换为毫秒。我确信这段代码曾经工作过(错误的记忆或者更好的标准可能会在2015年超过2013年)。

repo is here

#include <iostream>
#include <chrono>

class Stopwatch final
{
public:

    using elapsed_resolution = std::chrono::milliseconds;
    using elapsed_duration = std::chrono::duration<std::chrono::milliseconds>;

    Stopwatch()
    {
        Reset();
    }

    void Reset()
    {
        reset_time = clock.now();
    }

    elapsed_duration Elapsed()
    {
        return std::chrono::duration_cast<elapsed_resolution>(clock.now() - reset_time);
    }

private:

    std::chrono::high_resolution_clock clock;
    std::chrono::high_resolution_clock::time_point reset_time;
};

int main(void)
{
    auto s = Stopwatch();

    std::cout << s.Elapsed().count() << std::endl;
}

1 个答案:

答案 0 :(得分:2)

这一行:

using elapsed_duration = std::chrono::duration<std::chrono::milliseconds>;

需要是这样的:

using elapsed_duration = std::chrono::duration<float, std::milli>;