【问题标题】:Getting a 'was not declared in this scope' error获得“未在此范围内声明”错误
【发布时间】:2014-10-06 22:35:32
【问题描述】:
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))




我不明白为什么会产生这个错误,谁能帮助解释我做错了什么?

【问题讨论】:

  • 您的标题显示“未在此范围内声明”(并且消息周围缺少引号使您的标题很难阅读)。该消息不会出现在您的问题正文中。另外,请更新您的问题以显示完整的代码示例。你的实际代码必须有一个或多个#include 指令;我们需要看到他们。

标签: c++


【解决方案1】:

std::max 的唯一重载具有三个参数,用于给出前两个参数中较大的一个,将第三个参数解释为比较函数,以代替 &lt; 来比较值。它没有给出三个值中的最大值。

要获得三个值中的最大值,请使用带有初始化列表的重载:

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

或者,如果您陷入 C++11 之前的世界,请两次调用两个值的重载:

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

【讨论】:

    【解决方案2】:

    Max 并不像你想象的那样接受三个参数。

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

    【讨论】:

    • 感谢尝试:double d=max(abs(a), abs(b)); d= max(d,abs(c));
    【解决方案3】:

    @GWW 是正确的,但如果您使用的是 C++ 11 编译器,则有一个新的可变参数变体 - 您只需要提供一个包含多个参数而不是多个参数的初始化列表:

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

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 2015-06-23
      • 2010-10-02
      相关资源
      最近更新 更多