Visual Studio不允许我使用sqrt或floor,模糊调用重载函数

时间:2012-06-10 16:11:15

标签: c++ sqrt

我打电话给

long long a = sqrt(n/2);

an都是long long,但它不会让我编译,因为它说我使用sqrt()是一个含糊不清的电话。我看不出它在这里有多么模棱两可。我该如何解决这个问题?我对floor()也有同样的问题。

我的包含

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;

4 个答案:

答案 0 :(得分:8)

sqrt()floor()有几个重载,根据重载解析规则,对sqrt(long long)的调用没有“最佳匹配”。只需将参数转换为适当的类型 - 即。,

long long a = sqrt(static_cast<double>(n/2));

答案 1 :(得分:6)

//use 
sqrt(static_cast<double>(n/2));
//instead of 
sqrt(n/2);

答案 2 :(得分:3)

sqrt函数需要floatdoublelong double

long long a = sqrt(n * 0.5);

您可能会失去一些将<{1}}转换为long long精确度,但该值非常接近。

答案 3 :(得分:1)

根据参考资料

http://www.cplusplus.com/reference/clibrary/cmath/sqrt/

我建议先转换为 long double sqrt 的重载不接受整数值

积分参数总是可以产生“实际”值(浮点数,双倍,长双倍)