1

所以我正在学习 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;
        }
    }
}
4

3 回答 3

2
using namespace std;

// function prototypes
double max( ... )

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

要么把你max的名字放到它自己的命名空间中,要么不要 import std,或者两者兼而有之。作为一种折衷方案,您可以using单独使用您需要的名称,std而不是所有名称。像这样:

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

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

于 2013-09-27T04:57:10.073 回答
0

使用::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()和/或为您的函数使用不同的名称。

于 2013-09-27T04:52:09.610 回答
0

问题是 max 是模棱两可的。

您可以重命名您的函数(类似于 my_max ),

或使用范围解析运算符来调用您的(全局)版本,例如。::最大限度()

于 2013-09-27T04:57:04.007 回答