簡體   English   中英

獲取“未在此范圍內聲明”錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM