c++ - 不能在嵌套结构中使用 union 元素作为 scanf() 的参数来存储所需的值

标签 c++ c nested scanf unions

我在将 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/

相关文章:

c++ - 使用视觉样式设置 WinAPI 工具栏的背景色?

c++ - llvm 的 Hello pass 示例的编译错误

c++ - 解释 size_t(*)(const std::pair<int, int>&) 是什么意思

c - 如何测量 program.exe 启动时间?

python - 使用 Python 3 获取文件的杂音哈希

Python,压缩在缩进级别和 PEP-8 宽度限制之间

c++ - 如何正确接收来自管道的数据?

c - 如何将文件读入结构数组?

iphone - 如何嵌套UITabBarController

arrays - 如何在嵌套的 JSON 值上使用 SwiftyJSON