【问题标题】:Too many <chrono> errors (std::chrono::timepoint) (VS2015)<chrono> 错误太多 (std::chrono::timepoint) (VS2015)
【发布时间】:2015-12-13 22:36:16
【问题描述】:

在我的项目中,在我升级到 VS2015 之前,它编译得很好。现在我遇到了 10 个与 std::chrono::timepoint 相关的错误。 这些都是错误:https://gyazo.com/0d3c51cf87c49661b0f24da4a027b0d9 (图片太多了)

导致错误的示例代码行:

fStart = clock::now(); 导致no operator '=' matches these operands

double t = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(clock::now() - fStart).count();

原因

no instance of function template 'std::chrono::duraction_cast' matches the argument list. argument types are: ( &lt;error-type&gt; )

(fStart 是一个 chrono::system_clock::timepoint, t 显然是一个 double)

如果有人想查看这些错误,这里是完整的功能:

void Animation::update() {
    using clock = std::chrono::high_resolution_clock;
    if (animType == TYPE_MS) {
        if (firstUpdate) {
            fStart = clock::now();
            firstUpdate = false;
        }

    double t = std::chrono::duration_cast<std::chrono::milliseconds>(clock::now() - fStart).count();

    if (!paused) {
        if (t >= frames[frame]->getTime())
            advance();
    }
} else if (animType == TYPE_FRAME) {
    if (firstUpdate)
        firstUpdate = false;

    if (!paused)
        fTime += speed;

        if (speed < 0.0) {
            if (fTime <= -frames[frame]->getTime())
                advance();
        } else {
            if (fTime >= frames[frame]->getTime())
                advance();
        }
    }
}

我应该怎么做才能解决这些问题?

【问题讨论】:

  • 如果你不告诉我们fStart 是什么,我们怎么知道? :)
  • 一般来说,一个最小的、可重现的例子会很有帮助。
  • std::chrono::time_point 是一个模板。来自不同时钟的 time_points 不一定是可转换的。我们需要知道实际的类型。
  • 那是你的问题。您不能将 high_resolution_clock::time_point 存储在 system_clock::time_point 中
  • 见[std::chrono::high_resolution_clock] may be an alias of std::chrono::system_clock or std::chrono::steady_clock, or a third, independent clock.here

标签: c++ visual-studio visual-c++ std chrono


【解决方案1】:

我建议放弃使用std::chrono::high_resolution_clock。

如果您需要一个必须在处理器运行或进程之间保持稳定的time_point,请使用与民用日历有明确关系的std::chrono::system_clock。

否则使用std::chrono::steady_clock。这个时钟就像一个秒表。它可以用来计时,但它不能告诉你当前的(民用)时间。

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 2014-03-23
    • 1970-01-01
    • 2013-10-25
    • 2011-12-14
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多