如何将参数从结构正确传递到函数
How can I pass parameters from a struct to a function correctly?
我希望函数 dateCreate 将给定的参数传递给结构中的参数。
我已经尝试将Date d变量作为函数参数,但它仍然向我显示错误"字段"日/月/年"无法解决"。
struct Date{
int day;
int month;
int year;
} ;
Date dateCreate (int d, int m, int y){
Date d;
d.day =d;
d.month = m;
d.year =y;
return 0;
};
int main() {
int d,m,y;
cin << d << m << y;
cout << dateCreate(d,m,y); //Not completely sure if this is right either.
return 0;
}
我希望该函数从给定的整数创建 Date 类型的数据。谢谢。
dateCreate
应该返回d
,而不是0
。
要编译表达式cout << dateCreate(d,m,y)
,您需要实现std::ostream& operator<<(std::ostream&, Date const&)
。
与其
说是一个自由函数,我建议你给你struct
一个构造函数
struct Date{
Date(int _day, int _month, int _year)
: day(_day), month(_month), year(_year)
{ }
int day;
int month;
int year;
};
然后你可以像
int d,m,y;
cin >> d >> m >> y;
Date date(d, m, y);
要做类似的事情
cout << date;
您需要为Date
结构重载operator<<
等效代码:
struct Date
{
int d;
int m;
int y;
};
int main()
{
int d = 1, m = 1, y = 1980;
std::cin >> d >> m >> y;
Date date{d, m, y}; // default constructor is called here
}
也就是说,因为你正在解决的问题是读取一个日期,所以你可能应该像这样实现它:
struct Date
{
int d;
int m;
int y;
};
std::istream& operator >>(std::istream& in, Date& d)
{
int d = 1, m = 1, y = 1980;
if(in >> d >> m >> y) // only set values if they were read successfully
d = Date{d, m, y};
return in;
}
客户端代码:
int main()
{
Date d{1, 1, 1980};
in >> d;
}
修复代码段的最简洁方法是为Date
对象提供输出运算符,例如
std::ostream& operator << (std::ostream& os, const Date& date)
{
return os << date.day << "/" << date.month << "/" << date.year;
}
然后使用正确的运算符读取用户输入
cin >> d >> m >> y;
最后使用编译器生成的Date
构造函数:
cout << Date{d, m, y};
只要不验证输入,就不需要创建日期对象的函数。
但是请注意,Date
对象现在可以处于无效状态(负日或负月值等),因此为了将来的改进,您应该实现一个正确的构造函数来抛出非法输入,或者更改createDate
函数,使其例如在非法输入时返回一个空的std::optional<Date>
(std::nullopt
)。
相关文章:
- 使用不带参数的函数访问结构元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 链表,反向函数,数据结构
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 需要帮助将结构数组传递给函数
- 使用cpp中的结构和函数的多个学生条目
- 如何传递带有通过引用传递的结构参数的函数?
- 在类构造函数中使用结构变量
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 在类构造函数中定义结构变量的参数
- 如何在模板类函数中分配结构值?
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 在结构外部调用指向函数的指针
- 函数:结构的数组
- C++错误:只能为对象和函数结构指定存储类
- 将libuv与函数结构一起使用,而不是函数回调
- 从c#调用c++函数-结构体,指针,函数指针
- 函数结构数组输入cin问题