具有参数计算错误的重载函数

overloaded function with argument evaluation error

本文关键字:重载 函数 错误 计算 参数      更新时间:2023-10-16

所以我正在学习C++,我必须创建一个重载函数,并从一组数字中获取最大的数字。这适用于 2 个数字,但是当我注释掉对函数的调用 2 个数字并尝试使用 3 个数字时,它会给我很多错误。我需要一双新鲜的眼睛来查看我的代码,看看我做错了什么。

#include <iostream>
using namespace std;
// function prototypes
double max(double numberOne, double numberTwo);
double max(double numberOne, double numberTwo, double numberThree);
int main()
{
    int numberOne,
        numberTwo,
        numberThree;
    // user input
    cout << "Input number 1: " << endl;
    cin >> numberOne;
    cout << "Input number 2: " << endl;
    cin >> numberTwo;
    cout << "Input number 3: " << endl;
    cin >> numberThree;
    cout << "The largest of " << numberOne << " and " << numberTwo << ": " << max(numberOne, numberTwo) << endl;
    cout << "The largest of " << numberOne << ", " << numberTwo << ", and " << numberThree << ": " << max(numberOne, numberTwo, numberThree) << endl;
    return 0;
}
// function declarations
double max(double numberOne, double numberTwo) {
    // if number one is greater than number two return that
    // otherwise return numberTwo as the greater value
    if (numberOne > numberTwo) {
        return numberOne;
    } else {
        return numberTwo;
    }
}
double max(double numberOne, double numberTwo, double numberThree) {
    // compare 1 and 2 to see which is greater
    if (numberOne > numberTwo) {
        if (numberOne > numberThree) {
            // 2 is greater return it
            return numberOne;
        } else {
            // else 3 is greater return that
            return numberThree;
        }
    } else {
        if (numberTwo > numberThree) {
            // 2 is greater return it
            return numberTwo;
        } else {
            // else 3 is greater return that
            return numberThree;
        }
    }
}
using namespace std;
// function prototypes
double max( ... )

通过在此上下文中定义具有该名称的函数,您遇到了与 std::max 的冲突。

要么

max放入其自己的命名空间中,要么不要导入std,或者两者兼而有之。 作为折衷方案,您可以从std而不是所有名称中using所需的单个名称。 这样:

using std::vector;
using std::map;
using std::string;

顺便说一句,我感到震惊 - 好像我最近自己提出了这个问题!

使用::max()而不是max()来访问您的版本,因此它不会与std::max()冲突。 这样:

cout << "The largest of " << numberOne << " and " << numberTwo << ": " << ::max(numberOne, numberTwo) << endl;
cout << "The largest of " << numberOne << ", " << numberTwo << ", and " << numberThree << ": " << ::max(numberOne, numberTwo, numberThree) << endl;

但是,更优雅的解决方案是实际利用std::max()和/或为您的函数使用不同的名称。

问题是max是模棱两可的。

你可以重命名你的函数(像my_max这样),

或使用范围解析运算符调用您的(全局)版本,例如::max()