收到"未在此范围内声明"错误
Getting a 'was not declared in this scope' error
void new_doubles(double a, double b, double c)
{
double d=max(abs(a), abs(b), abs(c));
cout<<d;
}
产生此编译时错误:
In file included from /usr/local/gcc4.9.0/include/c++/4.9.0/bits/char_traits.h:39:0,
from /usr/local/gcc4.9.0/include/c++/4.9.0/string:40,
from /usr/local/gcc4.9.0/include/c++/4.9.0/stdexcept:39,
from /usr/local/gcc4.9.0/include/c++/4.9.0/array:38,
from std_lib_facilities_4.h:27,
from hw4pr4.cpp:1: /usr/local/gcc4.9.0/include/c++/4.9.0/bits/stl_algobase.h: In instantiation of ‘const _Tp& std::max(const _Tp&, const _Tp&, _Compare) [with _Tp = double; _Compare = double]’:
hw4pr4.cpp:35:36: required from here
/usr/local/gcc4.9.0/include/c++/4.9.0/bits/stl_algobase.h:264:26: error: ‘__comp’ cannot be used as a function
if (__comp(__a, __b))
我不明白为什么会产生此错误,任何人都可以帮助解释我做错了什么?
具有三个参数的 std::max
的唯一重载用于给出前两个参数中较大的一个,将第三个解释为比较函数,而不是<
来比较值。它没有给出三个值中最大的一个。
若要获取三个值中的最大值,请使用采用初始化器列表的重载:
double d=max({abs(a), abs(b), abs(c)});
^ ^
或者,如果您陷入了 C++11 之前的世界,请调用两个值的重载两次:
double d=max(abs(a), max(abs(b), abs(c)));
^^^^ ^
Max 不会像你认为的那样接受三个参数。
double d=max(max(abs(a), abs(b)), abs(c));
@GWW是正确的,
但是如果您使用的是C++ 11编译器,则会出现一个新的可变参数变体 - 您只需要提供具有多个参数而不是多个参数的初始值设定项列表:
void new_doubles(double a, double b, double c)
{
double d = max( { abs(a), abs(b), abs(c) } );
cout << d;
}
相关文章:
- 在气泡排序程序中未声明错误功能
- 未在此范围内声明错误 'xy'
- 在此范围内未声明错误"Clreol"
- 为什么 C 编译器不在 for 循环体中给出重新声明错误?
- 如何修复范围内的字符串声明错误
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 无法识别的模板声明错误 - 不明白我做错了什么
- C 如何从构造函数中声明(错误C2065未宣布的标识符)
- C 无法解释的类“尚未声明”错误,这是由于名称空间而导致的
- 如何解决声明错误
- 在标题文件中获取声明错误
- 异常声明错误
- "inet_ntoa"未声明错误
- #include <string> 导致很多'<blank>'尚未声明错误
- 类声明错误
- C++成员函数未声明错误时(当它看起来是错误时)
- 代码块 HelloWorld C 示例不起作用:未声明错误"ptrdiff_t"
- 头文件类成员函数声明错误:"incomplete type name in nested name specifier"
- 预期语句和预期声明错误 c++
- 针对 android 编译的问题..."未在此范围内声明"错误