这是我的第一个问题。我今年夏天开始学习C ++,这部分代码有点问题:
struct Contact{
char name[30];
char surname[50];
int age;
struct Born{
int day;
int month;
int year;
};
char mail[50];
};
嗯,我认为代码的这部分是可以的,但是我有这个功能来输入信息,我不知道我做错了什么。
Contact readContact(){
Contact c;
cout << "\t NAME: ";
cin.getline(c.name,30);
cout << "\t SURNAME: ";
cin.getline(c.surname,50);
cout << "\t AGE: ";
cin >> c.age;
cout << "\t BIRTHDATE:";
cin >> c.Born.day >> c.Born.month >> c.Born.year;
cout << "\t EMAIL: ";
cin.getline(c.mail,50);
cin.ignore();
return c;
}
我收到以下错误消息:
无效使用'struct Contact :: Born'|
也许这是一个简单的错误,但我是编码的新手,我看不出我做错了什么。 :(
答案 0 :(得分:6)
正如评论中所述,符号Born
是类型,与Contact
非常相似。
简单的解决方案是将结构声明为变量的匿名类型:
struct Contact{
char name[30];
char surname[50];
int age;
struct /* No type name here */ {
int day;
int month;
int year;
} Born; // Member variable name here
char mail[50];
};
答案 1 :(得分:2)
您可以将内部结构定义为匿名类型:
struct Contact
{
char name[30];
char surname[50];
int age;
struct /* anonymous */
{
int day;
int month;
int year;
} Born; /* member name */
char mail[50];
};
这意味着您没有内部结构的显式类型(它是匿名的),因此您不能在其他代码中声明该内部匿名类型的变量。
要允许使用内部结构,您可以将它们分开:
struct Born_s
{
int day;
int month;
int year;
};
struct Contact
{
char name[30];
char surname[50];
int age;
Born_s Born;
char mail[50];
};
或在结构内部给出一个类型名称(内部类型的用法:Contact::Born_s
),如:
struct Contact
{
char name[30];
char surname[50];
int age;
struct Born_s /* inner type name: Contact::Born_s */
{
int day;
int month;
int year;
} Born; /* member name */
char mail[50];
};
答案 2 :(得分:1)
正如其他人已经指出 # Statement 2
list2 = [i for int(i) in list1.split(' ')]
所声明的那样,是一种不是成员的类型。但你可以用它来声明一个像这样的成员:
Born
这很有用,因为您以后可以使用此类型,例如作为函数参数:
struct Contact{
char name[30];
char surname[50];
int age;
struct Born{
int day;
int month;
int year;
};
Born birthDate; //<- member declaration using Contact::Born as a type
char mail[50];
};