是否有可能使用std ::计时::持续时间与众议员类型为双? 我得到的编译器错误在vs2012当

2019-10-20 11:44发布

我得到了下面的编译器(vs2012)错误:

错误3错误C2679:二进制“+ =”:没有操作员发现这需要类型的右边的操作数“常量性病::计时::持续时间<_Rep,_Period>”(或没有可接受的转换)C:\程序文件(x86)\微软的Visual Studio 11.0 \ VC \ \包括计时749

我的时间的定义是:

// Tick interval type in nanoseconds
typedef std::chrono::duration<double, std::ratio<1, 100000000>> tick_interval_type;

同样的错误,当我使用float ...这只有当众议员类型的持续时间是整数编译。

是否有人可以帮助?

编辑(从输出更完整的日志):

C:\程序文件(86)\微软的Visual Studio 11.0 \ VC \包括\计时(749):错误C2679:二进制“+ =”:没有操作员发现它采用类型常量性病的”一个右边的操作数::计时::持续时间<_Rep,_Period>”(或没有可接受的转化率)与[_Rep =双,_Period =标准::纳米] C:\程序文件(86)\微软的Visual Studio 11.0 \ VC \包括\计时( 166):可以是“标准::计时::持续时间<_Rep,_Period>&的std ::计时::持续时间<_Rep,_Period> ::运算+ =(常量的std ::计时::持续时间<_Rep,_Period>& )”与[_Rep = __的int64,_Period =标准::纳米],而试图匹配参数列表 '(标准::计时::纳秒,常量性病::计时::持续时间<_Rep,_Period>)' 与[_Rep =双,_Period =标准::纳米] C:\程序文件(86)\微软的Visual Studio 11.0 \ VC \包括\螺纹(164):见参考起作用模板实例“xtime的标准:: _ To_xtime(常量的std ::计时::持续时间<_Rep,_Period>&)”被编译与[_Rep =双,_Period =标准::纳米] C:\ dev的\项目\ revolverx \类\ ticker.h(78):请参阅重新 ference起作用模板实例 '无效的std :: this_thread :: sleep_for(常量的std ::计时::持续时间<_Rep,_Period>&)' 被用[_Rep =双,_Period =标准::纳米]编译

Answer 1:

<chrono>在Visual Studio中是断开的。 它不与混合型算法,其中,可以说,是工作的主要特征之一的<chrono> 。 你得到这个错误,因为其中一个侧面使用__int64毫微秒,另一种使用double毫微秒。

我建议,要么放弃它,取而代之的是真正的C ++实现的,或者使用Boost.Chrono。



Answer 2:

更新:我已经降临这个问题,它最初发布四年之后,我已经测试了这个上的Visual Studio 2015年它现在编译。 例如:

#include <iostream>
#include <iomanip>
#include <chrono>

int main()
{
    typedef std::chrono::duration<double, std::ratio<1, 100000000>> tick_interval_type;  // Originally posted line
    tick_interval_type tick {0};
    tick += std::chrono::microseconds(3);
    std::cout << std::setprecision(6) << std::fixed << tick.count();
    return 0;
}

输出:

300.000000


文章来源: Is it possible to use std::chrono::duration with Rep type as double? I get compiler error in vs2012 when I try