c++变量重载歧义
C++ variable overloading ambiguity
对于以下代码行:
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)"
我也试过铸造inc
和ceil(log10(i))
浮动无济于事。想法吗?
是什么让你认为使用inc
或ceil
会有帮助?编译器告诉您,它无法确定您是需要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));
相关文章:
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- C++ 类的构造函数和函数调用运算符 () 重载之间的歧义
- 通过继承重载运算符会导致歧义
- 运算符的歧义错误<<自定义 std::ostream 子类中的重载
- Int64 和 time_t 之间的 C++ 重载歧义
- 如何让编译器知道要调用函数的哪个重载以避免歧义?
- 如何解决以下代码中的函数重载歧义
- c++ 构造函数重载歧义与initializer_list
- 如何消除重载模板函数的歧义
- 解决 CRTP 函数重载歧义问题
- 为什么在重载区域函数时在波纹管代码的情况下会出现歧义
- C++中的重载歧义,用于自动将对象转换为"printable"格式
- 在 c++ 中使用重载的歧义错误
- 为什么any_cast函数重载不会导致歧义?
- 转换运算符重载歧义,编译器不同
- 重载模板化函数歧义问题
- 将"unsigned char"传递给需要 char 或 const char* 的重载函数会导致歧义
- 带有initialization_list的函数重载导致歧义
- operator=使用move assign和pass by value copy assign的歧义重载
- c++歧义重载问题