c++变量重载歧义

C++ variable overloading ambiguity

本文关键字:歧义 重载 变量 c++      更新时间:2023-10-16

对于以下代码行:

for (int i = 1; i <= var; i++) { double inc = (14.0) - double(ceil(log10(i)))};

我一直得到错误

Overloading ambiguity between "std::log10(double)" and "std::log10(float)"

我也试过铸造incceil(log10(i))浮动无济于事。想法吗?

是什么让你认为使用incceil会有帮助?编译器告诉您,它无法确定您是需要log10(float)还是log10(double)。你需要让编译器明白这一点

double inc = (14.0) - double(ceil(log10((float)i)));

double inc = (14.0) - double(ceil(log10((double)i)));
Overloading ambiguity between "`std::log10(double)`" and "`std::log10(float)`"
                                           ^^^^^^                     ^^^^^

正如@John3136所评论的,错误是指log10函数的输入。在本例中,它是int类型的i变量。由于int既不是float也不是double,而且这两种转换同样可行,编译器不知道该选择哪一种。因此,您必须显式地选择一个。例如:

std::log10(static_cast<float>(i));