[英]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編譯器,則有一個新的可變參數-您只需要提供一個包含多個arg而不是多個arg的初始化列表:
void new_doubles(double a, double b, double c)
{
double d = max( { abs(a), abs(b), abs(c) } );
cout << d;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.