BorlandC перегруженные функции

BorlandC перегруженные функции
В чём ошибка? Пишет, что тело уже было объявлено функцией progress(int)

#include
#include
#include

int progress(int sum)
{
int i=0,j=0,a[3][3];
while(i<3){
while(j<3){
if(i==j)
sum+=a[j];
j++;
}
i++;
}
return (sum);
}

int progress(int razn)
{
int i=0,j=0,mass[3][3];
while(i<3){
while(j<3){
razn-=mass
[j];
j++;
}
i++;
}
return razn;
}

int main()
{
int a[3][3],mass[3][3],sum,razn;
a[0][0]=0; a[0][1]=1; a[0][2]=2;
a[1][0]=3; a[1][1]=4; a[1][2]=5;
a[2][0]=6; a[2][2]=7; a[2][3]=8;

mass[0][0]=5; mass[0][1]=4; mass[0][2]=2;
mass[1][0]=6; mass[1][1]=9; mass[1][2]=6;
mass[2][0]=5; mass[2][2]=45; mass[2][3]=76;

cout< <"a[0][0]+a[1][1]+a[2][2]="<

  • Ошибка в том, что компилятор определяет, какую именно функцию вызвать, по ее имени и типам параметров. Обе функции имеют сигнатуру progress(int), и компилятор не может понять, какой вызов происходит при, скажем, progress(2). Нужно, например, добавить в одну из функций ложный параметр
    int progress(int sum);
    int progress(int razn, int metka);
    ...
    progress(2);//sum
    progress(2,0);//razn
    но вообще так делать нежелательно.
    А вообще вопросы по коду должны включать:
    1. Условие (не зная, что ты хочешь сделать, нельзя подсказать, как этого добиться) ;
    2. Код (желательно на pastebin.com - а то будет, как у тебя) ;
    3. Описание проблемы, причем конкретное (худо-бедно у тебя в вопросе есть).
  • Скажу проще.
    Напишите вызов функции progress для первого тела и вызов для второго.
    Разве они чем-то внешне отличаются?
    У обеих функций вызов написан одинаково.
    Параметр один и тот же, и тип его тот же.
    Вы сами не можете отличить, что делается.
    Результаты одного типа.

    Компилятор не сможет выбрать, вы ошиблись.
    Или тип функции, или тип параметра или количество параметров должны отличаться в разных перегружаемых функциях, операторах
    Например оператор + может складывать числа, если параметры числовые, или сцеплять строки, если параметры заданы в вызове строковые.
    Компилятор видит тип и выбирает нужную функцию (перегружает) .
    Если над одними и теми же типами производятся разные действия, то надо хотя бы знать какой будет на выбор тип результата.
    Если же и при разной обработке данных результаты одинакового типа, то тогда функция должна ИНАЧЕ называться, она не будет перегружаемой.

  • Сигнатура перегружен ной функции определяется по названию, числу аргументов и их типу. В вашем случае сигнатуры равны. Такое не перегружается.