Как исправить «ожидаемые» ошибки в C ++ - PullRequest
0 голосов
/ 19 декабря 2018

Это программа для определения возраста человека. C ++ показывает мне «ожидаемую» ошибку в строке 33. Присутствует ошибка определения функции calc ().Можете ли вы помочь мне исправить это.Я не могу понять, в чем ошибка.

#include<iostream.h>
#include<conio.h>
struct date
{
    int day;
    int month;
    int year;
};
date birth;
date current;

void main()
{
    void calculate(int,int,int,int,int,int);
    cout<<"\nEnter your date of birth";
    cout<<"\nDay: ";
    cin>>birth.day;
    cout<<"\nMonth: ";
    cin>>birth.month;
    cout<<"\nYear: ";
    cin>>birth.year;
    cout<<"\nEnter current date";
    cout<<"\nDay: ";
    cin>>current.day;
    cout<<"\nMonth: ";
    cin>>current.month;
    cout<<"\nYear: ";
    cin>>current.year;
    calculate     (birth.day,birth.month,birth.year,current.day,current.month,current.year);
    getch();
}

// Error on line below
void calculate(int birth.day,int birth.month,int birth.year,int   current.day,int current.month,int current.year)
{
    int monthdays[]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(birth.day>current.day)
    {
        current.day=current.day=monthdays[birth.month-1];
        current.month=current.month-1;
    }
    else if(birth.month>current.month)
    {
        current.year=current.year-1;
        current.month=current.month+12;
    }
    int calculated_date=current.date-birth.date;
    int calculated_month=current.month-birth.month;
    int calculated_year=current.year=birth.year;

    cout<<"Present age= "<<calculated_date<<calculated_month<<calculated_year;
}

Ошибка в (33,27)

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Хотя трудно понять, что означает ошибка, не видя ошибки, и трудно соотнести ее номер строки с опубликованным кодом с учетом форматирования, наиболее вероятной причиной ошибки является то, что '.'не является допустимым символом для идентификатора, поэтому все имена параметров в определении функции calculate являются недопустимыми идентификаторами.Это может привести к появлению сообщения об ошибке, содержащего слово «ожидается» (например, «ожидается идентификатор»).

Попробуйте вместо этого использовать «_» или camelCase для имен параметров, если вам необходимо передать их все по отдельности.вы объявили эту удобную структуру date для передачи, так что вы можете просто заставить вашу функцию принимать параметры date birth и date current вместо каждого члена каждого из двух date экземпляров.

0 голосов
/ 19 декабря 2018

В C ++ нельзя передавать параметры как переменные-члены класса.В

void calculate(int birth.day, ...

birth.day недопустимо.

Однако можно передать весь класс и затем использовать переменные-члены.

Изменить

void calculate(int,int,int,int,int,int);

в

void calculate(date, date); 

, а затем

calculate       (birth.day,birth.month,birth.year,current.day,current.month,current.year);

в

calculate(birth, current);

и, наконец,

void calculate(int birth.day,int birth.month,int birth.year,int   current.day,int current.month,int current.year)

в

void calculate(date birth, date current)

Есть несколько способов улучшить это, передавая ссылку

void calculate(const date & birth, date current) 

(обратите внимание, что current не является ссылкой, поскольку она будет изменена в функции) и очисткупару опечаток в calculate

current.day=current.day=monthdays[birth.month-1]; 

должно быть

current.day=current.day+monthdays[birth.month-1];

или

current.day+=monthdays[birth.month-1];

и

int calculated_date=current.date-birth.date;

больше похоже на

int calculated_day=current.day-birth.day;

Компилятор поймает вторую опечатку, но, вероятно, не первую.Я также не продал логику, используемую в calculate, но, к счастью, TurboC ++ поставлялся с Turbo Debugger, одним из лучших доступных на тот момент отладчиков, и, на мой взгляд, он все еще хорошо работает.

0 голосов
/ 19 декабря 2018

вероятно ошибка из строки void calculate(int birth.day,int birth.month,int birth.year,int current.day,int current.month,int current.year)

просто замените '.'на '_' или что-то вроде включения в его тело

[править]

Кроме этого пункта, я призываю вас изменить вашу функцию, чтобы получать в параметре только дату рождения и текущую дату, этобесполезны и извлекают их поля, в то время как это может быть сделано самой функцией.

Предупреждение, поскольку вы изменяете current в, вы должны получить его current по значению, пока выможно получить рождение по константной ссылке.Конечно, вы также можете использовать локальную переменную вместо того, чтобы изменять current ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...