尝试初始化结构内的联合时出错
Error when trying to initialize a union inside a struct
所以我是一个函数,它返回指向结构(parse_files_result_t*
(的指针。此结构包含一个联合:
struct parse_files_result_t{
result_tag tag;
union {
struct parse_file_error_t *err_ptr;
struct parse_file_response_t *ok_ptr;
} data;
};
我想使用联合来根据函数中的计算返回*err_ptr
或*ok_ptr
。
所以我写了以下代码:
parse_files_result_t* result = (parse_files_result_t*)malloc(sizeof (parse_files_result_t));
if (success) {
parse_file_response_t response = //data
*result = parse_file_result_t{result_tag::Ok, result->data.ok_ptr = &response};
return result;
} else {
parse_file_error_t errorresponse = //data
*result = parse_files_result_t{{result_tag::Err}, {result->data.err_ptr = &errorresponse}};
return result;
}
目前为止,一切都好。返回parse_file_error_t
的else
部分工作正常,因为parse_file_error_t
是联合的第一部分。在if
部分,我只想返回parse_file_response_t
.因为这是工会的第二个"部分",所以我得到这个错误:
错误:无法在初始化时将"parse_file_response_t*"转换为"parse_file_error_t*">
即使我写了result->data.ok_ptr
,我的编译器也试图将parse_file_response_t response
放入联合的parse_file_error_t
部分。
我该如何解决这个问题?
感谢您的帮助!
即使我写了
result->data.ok_ptr
,我的编译器也试图将parse_file_response_t response
放入联合的parse_file_error_t
部分。
是的。你把这么多东西压缩到一行里,你忘记了你告诉计算机做什么。
*result = parse_files_result_t{result_tag::Ok, result->data.ok_ptr = &response};
这个声明做了几件事。(从内到外工作,跟着走。我们将从result->data.ok_ptr = &response
开始,一直锻炼到*result = [stuff]
。
- 将
response
的地址分配给result->data.ok_ptr
。 - (临时(
parse_files_result_t
对象是使用初始值result_tag::Ok
和在步骤 1 中分配的值构造的。这些值分配给tag
和data.err_ptr
成员,因此会出现错误。 - 将步骤 2 中构造的对象分配给
*result
,覆盖在步骤 1 中完成的分配。
简化您的代码以(几乎(获得您想要的内容。
result->tag = result_tag::Ok;
result->data.ok_ptr = &response;
这提供了更多的代码行,但语法更清晰。此外,您为计算机创建的工作更少,因为这不再尝试创建临时parse_files_result_t
对象。
但是,仍然存在一个问题,因为result->data.ok_ptr
将是一个悬而未决的指针。不幸的是,我认为解决这个问题(以及解决其他问题(超出了你的问题范围。
- 为什么我在初始化带大括号的结构时出错?
- 使用根/C++时出错:没有匹配的构造函数来初始化'TTree'
- 尝试初始化结构内的联合时出错
- 将初始化的矢量作为引用传递时出错
- 使用编译器进行外部初始化时出错C++
- 向模板化静态成员初始化添加和不添加'typename'都会出错
- 在旧的 c++ (<c++11) 中,初始化结构会出错
- 从模板类初始化对象时出错.参考类模板实例化
- 可变大小的对象可能无法初始化 尽管初始化了,但出错
- 初始化地图时出错
- 非常量引用类型的无效初始化中出错.在Linux操作系统中使用c++代码.GCC编译器
- 初始化映射时出错
- 在c++中初始化构造函数中的静态成员变量时出错
- 初始化动态分配的数组时出错
- C2057构造函数初始化列表中的常量值定义出错
- 初始化my数组时出错
- C++中的初始化结构出错
- 初始化 JVM 时出错
- 初始化类型的非常量引用无效时出错
- 类型'int&'的引用初始化无效,传递参数 1 时出错