在另一个结构中声明内部结构会导致错误:结构使用无效
Declaration of inner struct in another struct results in error: invalid use of struct
这是我的第一个问题。我今年夏天开始学习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;
}
我收到以下错误消息:
无效使用"结构 联系人::出生"|
也许这是一个简单的错误,但我是编码新手,我看不出我做错了什么。 :(
正如评论中提到的,符号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];
};
您可以将内部结构定义为匿名类型:
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];
};
正如其他人所指出的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];
};
这很有用,因为您可以稍后将类型(例如(用作函数参数:
struct Contact {
// ... member decleration
void setBirthDate(Born newDate) {
birthDate = newDate;
}
};
相关文章:
- C++ 结构错误"调用'erase'没有匹配函数
- 尝试传递结构数组,但出现"无法将'结构'转换为'结构*'错误
- 结构错误:"no matching function for call to "
- UE4 数据表结构错误
- STL 对priority_queue<int、结构>错误
- C :用于体系结构错误的经典未定义符号
- 体系结构错误的未定义符号
- 奇怪的用户定义的比较结构错误,用于C++中的priority_queue
- 模板结构错误
- C++结构错误 - 错误 C2061:语法错误:标识符
- C++ 结构错误的前向声明
- 结构错误"uninitialized reference member"
- 使用 MPL::fold 与占位符和我自己的结构错误
- C++结构错误"No matching function for call..."
- 插入映射<字符串,结构>错误
- CPP 头文件结构错误
- 矢量和结构错误
- C++ 结构 - 错误 1 错误 C2143:语法错误:缺少'*'之前的';'
- 结构错误的构造函数(调用类的构造函数 denconstructor,用于填充结构)
- 结构错误与C++