如何修复C ++中的“预期”错误

时间:2018-12-19 18:23:37

标签: c++ compiler-errors

这是一个用于查找人的年龄的程序。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)中存在错误

3 个答案:

答案 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 birthdate current而不是两个{{1}中的每个成员}实例。