2014-10-06 115 views
0
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)) 




我不明白爲什麼這個錯誤被生產誰能幫助解釋我做錯了什麼?

+0

您的標題說「未在此範圍內聲明」(並且消息周圍缺少引號使您的標題非常難以閱讀)。該消息未顯示在您的問題的正文中。此外,請更新您的問題以顯示完整的代碼示例。你的實際代碼必須有一個或多個'#include'指令;我們需要看到他們。 – 2014-10-06 22:43:07

回答

1

Max不以您認爲的方式接受三個參數。

double d=max(max(abs(a), abs(b)), abs(c)); 
+0

謝謝嘗試: double d = max(abs(a),abs(b)); d = max(d,abs(c)); – 2014-10-06 22:43:16

5

std::max的使用三個參數的唯一的過載是用來給前兩個中的較大,解釋第三作爲比較功能,而不是使用<比較值。它沒有給出三個值中的最大值。

要獲得最大的三個值,使用需要一個初始化器列表中的過載:

double d=max({abs(a), abs(b), abs(c)}); 
      ^     ^

或者,如果你被困在一個預先C++ 11的世界,呼籲兩個超載值的兩倍:

double d=max(abs(a), max(abs(b), abs(c))); 
        ^^^^   ^
0

@GWW是正確的,但如果你使用的是C++ 11的編譯器,有一個新的可變參數的變化 - 你只需要提供與多個ARGS而不是多個ARGS的初始化列表:

void new_doubles(double a, double b, double c) 
{ 
    double d = max({ abs(a), abs(b), abs(c) }); 
    cout << d; 
}