另一个struct中的内部结构声明会导致错误:struct的使用无效

Mar*_*als 0 c++ struct

这是我的第一个问题.我今年夏天开始学习C++,这部分代码有点问题:

struct Contact{
    char name[30];
    char surname[50];
    int age;
    struct Born{
        int day;
        int month;
        int year;
    };
    char mail[50];
};
Run Code Online (Sandbox Code Playgroud)

好吧,我认为代码的这一部分是可以的,但是我有这个函数输入信息,我不知道我做错了什么.

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;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

无效使用'struct Contact :: Born'|

也许这是一个简单的错误,但我是编码的新手,我看不出我做错了什么.:(

Som*_*ude 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];
};
Run Code Online (Sandbox Code Playgroud)