这是一个用于查找人的年龄的程序。C++在第33行向我显示“预期”错误。当前存在错误的calculate()函数定义。你能帮我解决这个问题吗?我不明白这是什么错误。
#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)中存在错误
答案 0 :(得分:2)
在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附带的,Turbo Debugger是当时最好的调试器之一,在我看来,它仍然运行良好。
答案 1 :(得分:0)
错误可能来自第<T>
行
只需替换“。”用“ _”或类似的形式包含在其内
[编辑]
除了这一点,我建议您修改函数以仅在参数中接收出生日期和当前日期,这是无用的,并提取它们的字段,而这可以由函数本身完成。
警告,因为您将 current 修改为,您必须按值接收 current ,同时可以通过const引用接收出生。当然,您也可以使用局部变量而不是修改 current ...
答案 2 :(得分:0)
虽然很难在看不到错误的情况下分辨出错误的含义,并且很难根据给定的格式将其行号与发布的代码相关联,但最可能的错误原因是“。”。不是标识符的有效字符,因此calculate
函数定义中的所有参数名称都是无效的标识符。这可能会导致错误消息包含单词“ expected”(例如“ expected an identifier”)。
如果必须分别传递所有参数,请考虑使用“ _”或camelCase作为参数名称。但是,您已经声明了这种方便的date
结构可以传递,因此您可以让函数使用参数date birth
和date current
而不是两个{{1}中的每个成员}实例。