在C ++ 14中访问结构内部的并集中的字符串

时间:2018-09-13 10:07:14

标签: c++11

任何人都可以在无限制联合的帮助下解释如何在结构内部的联合中使用和访问字符串吗?

#include <iostream>
#include <string>

using namespace std;

typedef struct {
            int height;
            int width;
        } Page;

typedef struct {
            int test;
            union {
                Page page;
                int intVar;
                string  stringVar;
            } VarUnion;
        } VariableDataStruct;

int main()
{
    VariableDataStruct structeg;
    structeg.VarUnion.stringVar = "Hello";
    return 0;
}

当前在编译时出现以下错误:

unionstring2.cc:在“ int main()”函数中: unionstring2.cc:22:24:错误:使用已删除的功能“ VariableDataStruct :: VariableDataStruct()”      VariableDataStruct structeg;                         ^ unionstring2.cc:11:16:注意:“ VariableDataStruct :: VariableDataStruct()”被隐式删除,因为默认定义的格式不正确:  typedef struct {                 ^ unionstring2.cc:11:16:错误:使用已删除的功能‘VariableDataStruct ::: :()’ unionstring2.cc:13:19:注意:“ VariableDataStruct ::: :()”被隐式删除,因为默认定义格式不正确:              工会{                    ^ unionstring2.cc:16:11:错误:工会成员“ VariableDataStruct :::: stringVar”与非平凡的“ std :: basic_string <_CharT,_Traits,_Alloc> :: basic_string()[with _CharT = char; _Traits = std :: char_traits; _Alloc = std :: allocator]’    字符串stringVar;            ^ unionstring2.cc:11:16:错误:使用已删除的函数“ VariableDataStruct ::::〜()”  typedef struct {                 ^ unionstring2.cc:13:19:注意:“ VariableDataStruct ::::〜()”被隐式删除,因为默认定义格式不正确:              工会{                    ^ unionstring2.cc:16:11:错误:工会成员“ VariableDataStruct :::: stringVar”与非平凡的“ std :: basic_string <_CharT,_Traits,_Alloc> ::〜basic_string()[with _CharT = char; _Traits = std :: char_traits; _Alloc = std :: allocator]’    字符串stringVar;            ^ unionstring2.cc:22:24:错误:使用已删除的函数‘VariableDataStruct ::〜VariableDataStruct()’      VariableDataStruct structeg;                         ^ unionstring2.cc:18:11:注意:“ VariableDataStruct ::〜VariableDataStruct()”被隐式删除,因为默认定义的格式不正确:          } VariableDataStruct;            ^ unionstring2.cc:18:11:错误:使用已删除的功能‘VariableDataStruct ::::〜()’

2 个答案:

答案 0 :(得分:1)

您遇到的错误与访问union无关,而是与无法实例化struct无关:

 error: use of deleted function ‘VariableDataStruct::VariableDataStruct()’ 

您需要为struct提供一个构造器,以合理地初始化union

答案 1 :(得分:0)

Unions的成员具有非平凡的特殊成员函数(构造函数,赋值,析构函数)(例如std::string)也必须定义这些特殊函数。由于此联合不提供当前正在使用的成员的指定,因此无法定义那些特殊的成员函数。

改为使用std::variant<Page, int, std::string>