我在将 scanf 与 union 元素用作参数时遇到问题,其中高级 union 是嵌套结构的一部分。
#include <stdio.h>
int main()
{
typedef union { float chair; int bed; } HABITATION;
typedef struct { HABITATION room; int number; } HOUSE;
scanf("%d",&HOUSE.room.bed);
}
编译器的错误信息是: “错误:在 ) >>ROOF<< 之前的预期表达式”。
我做错了什么?
信息: 我目前使用 C,但我也对 C++ 中的相同操作和答案感兴趣。
最佳答案
我不懂 C,但在 C++ 中你的代码应该等同于:
#include <stdio.h>
union HABITATION { float chair; int bed; };
struct HOUSE { HABITATION room; int number; };
int main()
{
scanf("%d",&HOUSE.room.bed);
}
也许现在很明显您只定义了两种类型,但您从未在这段代码中创建任何东西的实例。 HOUSE
是一个类型而不是一个实例。
在c++中你会做
#include <iostream>
int main()
{
HOUSE h;
std::cin >> h.room.bed;
}
并且可能不会使用所有大写名称。有些人将它们用于全局变量,我更倾向于完全禁止它们。名字应该不言而喻,无需大声疾呼。 House
如果您对类使用首字母大写,对实例使用所有小写字母(例如 house
),那么 House
就足够清楚了。这也是 Stroustrup 在 his guideline 中提出的建议.
关于c++ - 不能在嵌套结构中使用 union 元素作为 scanf() 的参数来存储所需的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190286/