На строке input() выдаёт ошибку неоднозначность вызова, как можно решить?Нужно сделать 8 выводов через 3 функции

#include <iostream>
#include <cstring>

using namespace std;

struct tractorDriver{
    char name[20];
    int startYear;
    float GPA;
};
tractorDriver *students;

tractorDriver input(char* name=(char*)"Ivanov", int 
startYear = 1, float GPA =4);
tractorDriver input(int startYear = 1, float GPA = 
4);
tractorDriver input(float GPA = 4, char* name
(char*)"Ivanov");
void output();

int main() {
    students = new tractorDriver;
    input((char*)"Ivanov", 1, 4);//1
    input((char*)"Ivanov", 1);//1
    input(4.0f, (char*)"Ivanov");//3
    input(1, 4.0f);//2
    input((char*)"Ivanov");//1
    input(1);//2
    input( 4.0f);//3
    input();
    return 0;

}
void output(){
   cout<<"Name:"<<students->name<<" ";
   cout<<"Year"<<students->startYear<<" ";
   cout<<"GPA"<<students->GPA<<endl;
}



tractorDriver input(char *name, int startYear, 
float GPA) {

    strcpy(students->name, name);
    students->startYear=startYear;
    students->GPA=GPA;
    output();
    cout<<"1";

}

tractorDriver input( int startYear, float GPA) {
    strcpy(students->name,"Ivanov");
    students->startYear=startYear;
    students->GPA=GPA;
    output();
    cout<<"2";
}


tractorDriver input(float GPA, char *name) {
    strcpy(students->name, name);
    students->startYear=1;
    students->GPA=GPA;
    output();
    cout<<"3";
}

Ответы (1 шт):

Автор решения: DmitryK

Поскольку у вас во всех функциях заданы значения по-умолчанию для всех параметров, то компилятор не может найти сигнатуру для вызова input(); - для нее подходят все обозначенные сигнатуры. Либо уберите пустой вызов, либо уберите в двух из трёх сигнатур значение по-умолчанию для первого параметра:

// либо так
tractorDriver input(char* name=(char*)"Ivanov", int startYear = 1, float GPA =4);
tractorDriver input(int startYear, float GPA = 4);
tractorDriver input(float GPA, char* name = (char*)"Ivanov");

// либо так
int main() {
    students = new tractorDriver;
    ... 
    //input();  // либо так
    return 0;
}

И если вы работаете с глобальным объектом tractorDriver *students, то не надо у функций писать возвращаемое значение tractorDriver, ещё и как копию. Сделайте void input(...)

→ Ссылка