Проблема объявления функции и определения функции в Visual Studio - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в C ++, и у меня возникли проблемы. Я буду очень признателен, если кто-нибудь мне поможет. Мой англи sh не очень хороший. Пишу код в Visual Studio. Когда я использую перегруженную функцию и параметр по умолчанию одновременно, все в порядке:

    double max(double a, double b, double c, double d = 3.1415926)
    {
        cout << "pi: " << d << endl;
        if (a > b && a > c)
            return a;
        else if (b > a && b > c)
            return b;
        else
            return c;
    }
    

    int max(int a, int b, int c, int d = 20)
    {
        cout << "d: " << d << endl;
        if (a > b && a > c)
            return a;
        else if (b > a && b > c)
            return b;
        else
            return c;
     }

    int main()
    {
        int x = 10, y = 6, z = 23;
        double m = 1.2, n = 4.2, k = 3.1;

        cout <<"max value in x, y, z: "<< max(x, y, z) << endl;
        cout <<"max value in m, n, k: "<< max(m, n, k) << endl;
        return 0;
    }

Однако, если я сначала объявляю функцию, а затем определяю ее наконец, возникает следующая ошибка. :

int max(int a, int b, int c, int d = 20);
double max(double a, double b, double c, double d = 3.1415926);

int main()
{
    int x = 10, y = 6, z = 23;
    double m = 1.2, n = 4.2, k = 3.1;
    cout <<"max value in x, y, z: "<< max(x, y, z) << endl;
    cout <<"max value in m, n, k: "<< max(m, n, k) << endl;

    return 0;
}

double max(double a, double b, double c, double d = 3.1415926)
{
    cout << "pi: " << d << endl;
    if (a > b && a > c)
        return a;
    else if (b > a && b > c)
        return b;
    else
        return c;
}


int max(int a, int b, int c, int d = 20)
{
    cout << "d: " << d << endl;
    if (a > b && a > c)
        return a;
    else if (b > a && b > c)
        return b;
    else
        return c;
}

Visual Studio показывает Код серьезности Описание Ошибка строки файла C2572 'max': переопределение аргумента по умолчанию: параметр 1

Большое спасибо.

1 Ответ

2 голосов
/ 13 июля 2020

Значение по умолчанию вы указываете только один раз - в прототипе функции:

int max(int a, int b, int c, int d = 20);

int main()
{
    // code...
}

int max(int a, int b, int c, int d)
{
    // code...
}

То же, что и double версия

...