在结构中初始化联合-C ++

火箭球

我的代码:

#include <iostream>

using namespace std;

struct widget
{
    char brand[20];
    int type;
    union id
    {
        long id_num;
        char id_char[20];
    }id_val;
};

int main()
{
    widget prize = 
    {"Rolls", 0, "A2X"};

    return 0;
}

问题在于初始化结构中的联合时的初始化“ A2X”。传递“ A2X”时,编译器不知道我要用字符数组选择第二个选项,它需要长型。当我放

字符id_char [20]

之前

长id_num

一切都好。但是我想知道如何强制编译器接受char作为联合中的第二个选项的“ A2X”。感谢您的帮助。

埃雷里卡

但是我想知道如何强制编译器接受char作为联合中的第二个选项的“ A2X”。

您可以使用构造函数:

id(char const *id_char) {
    std::strcpy(this->id_char, id_char);
}

或者,您可以使用widget构造函数。

缺点是,如果您使用太大的输入字符串进行初始化,则编译器可能无法发出警告。可以使用所示的普通构造函数进行扩展以strlen在运行时检查溢出。如果您选择检查,我建议抛出异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章