vscode上运行出现的错误,想让p或者leapyear能在Output函数用,但是报错。经过尝试,似乎是因为p没赋值导致的。
相关代码贴上了,完整代码在图片。
问题应该很基础,但是比较急。
void Date::Leapyear(int y,int leapyear,int *p)
{
y=year;
if((y%100)%4 == 0)
{
int leapyear=1;
int *p = &leapyear;
cout<<"此年是闰年"<<endl;
}
else
{
int leapyear=0;
int *p = &leapyear;
cout<<"此年不是闰年"<<endl;
}
}
void Date::Output(int *p,int leapyear)
{
cout<<"闰年结果"<<*p<<endl;
cout<<year<<"."<<mouth<<"."<<day<<endl;
}
指针p用得不对,你是想实现用Leapyear函数判断是否是闰年,然后用Output函数打印年月日和是否是闰年,两个函数之间需要一个变量传递是否是闰年的结果。
一共有三个的问题:
1、没有理解函数的实参和形参,以及如何参数传递。C++参数传递有三种方式(1)值传递(2)指针传递(3)引用传递。当使用值传递和指针传递时,修改形参不会改变实参的值。函数内的局部变量作用域仅在函数内部。
2、判断闰年的条件不对,应该是被400整除,或者是被4整除但是不能被100整除。
3、Leapyear()不需要把y作为参数,一是因为y和p一样没有被赋值,二是可以直接用类的成员变量year。
我就按传指针修改一下你的代码:
1、修改类定义
class Date
{
private:
int year,month,day;
public:
Date(int y, int m, int d);
void Input(int y, int m, int d);
void Leapyear(int *p);//
void Output(int *p);//
void Calculation();
};
2、修改Date::Leapyear和Date::Output函数
void Date::Leapyear(int *p)//
{
if( (year%100!=0 && year%4==0) || (year%400==0) )//
{
*p = 1;//
cout<<"此年是闰年"<<endl;
}
else
{
*p = 0;//
cout<<"此年不是闰年"<<endl;
}
}
void Date::Output(int *p)//
{
cout<<"闰年结果"<<*p<<endl;
cout<<year<<"."<<month<<"."<<day<<endl;
}
3、修改main函数
int main()
{
int y,m,d,leapyear;
int *p=&leapyear;//指针p指向leapyear, leapyear用于存储是否为闰年的判断结果
Date t1(0,0,0);
t1.Input(y,m,d);
t1.Leapyear(p);//
t1.Output(p);//
system("pause");
return 0;
}
你这个代码思路比较混乱,传入参数也不初始化又不用,函数内部又重复定义和参数相同的变量。