在类构造函数中使用结构变量

Using a struct variable inside a class constructor

本文关键字:结构 变量 构造函数      更新时间:2023-10-16
struct Date
{
int year;
int month;
int day;
};
class Person
{
private:
string firstName;
string lastName;
Date dOB;
public:
Person();
Person(const string& f, const string& l, const Date& d);
};
Person::Person() : firstName("None"), lastName("None"), dOB(dOB.day(0),dOB.month(0), dOB.year(0)) {}

我有一个带有 3 个变量的结构日期,日、月、年。 下面,在类 Person 中,我使用 Date 作为构造函数。但是当我设置日、月和年 = 0 时,它显示错误,我有表达式必须具有指向函数类型的指针?我的问题是什么?我该如何解决它?

编译器认为语法dOB.day(0)是函数调用。

您可以这样写,而不是命名成员:

Person::Person() : firstName("None"), lastName("None"), dOB{0,0,0} {}

其中dOB的每个成员都初始化为 0。

这是一个演示。

将 CTOR 添加到Date结构中:

Date(int day, int month, int year) : year(year), month(month), day(day) {}

使用它:

Person::Person() : firstName("None"), lastName("None"), dOB(0, 0, 0) {}

或:

Person::Person(const string& f, const string& l, const Date& d) : dOB(d) { /*...*/ };

您的Date结构Aggregate type- 读取聚合

您可以使用direct initializationlist initialization

Person::Person() : firstName("None"), lastName("None"), dOB(0, 0, 0) {} // direct initialization

Person::Person() : firstName("None"), lastName("None"), dOB{0, 0, 0} {} // list initialization

上面已经包含了两种初始化dOB结构的方法。

但是,如果您只想要Person类的默认 ctor,您甚至不需要自己dOB初始化,因为int会自动初始化以0,并且dOb将自动初始化为{0, 0, 0}