C++11 在C++14中访问结构内部的联合中的字符串

C++11 在C++14中访问结构内部的联合中的字符串,c++11,C++11,有人能解释一下如何在无限制联合的帮助下在结构内部的联合中使用和访问字符串吗 #include <iostream> #include <string> using namespace std; typedef struct { int height; int width; } Page; typedef struct { int test; union {

有人能解释一下如何在无限制联合的帮助下在结构内部的联合中使用和访问字符串吗

#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” 可变数据结构; ^ unionstring2.cc:11:16:注意:“VariableDataStruct::VariableDataStruct”被隐式删除,因为默认定义的格式可能不正确: 类型定义结构{ ^ unionstring2.cc:11:16:错误:使用已删除的函数“VariableDataStruct::” unionstring2.cc:13:19:注意:“VariableDataStruct:::”被隐式删除,因为默认定义的格式不正确: 联合{ ^ unionstring2.cc:16:11:错误:联合成员“VariableDataStruct:::::stringVar”带有非平凡的“std::basic\u string::basic\u string[带有"CharT=char;_Traits=std::char\u Traits;_Alloc=std::allocator]” stringVar; ^ unionstring2.cc:11:16:错误:使用已删除的函数“VariableDataStruct::~” 类型定义结构{ ^ unionstring2.cc:13:19:注意:“VariableDataStruct::::~”被隐式删除,因为默认定义的格式不正确: 联合{ ^ unionstring2.cc:16:11:错误:联合成员'VariableDataStruct:::::stringVar'带有非平凡的'std::basic_string::~basic_string[带有_CharT=char;_Traits=std::char_Traits;_Alloc=std::allocator]' stringVar; ^ unionstring2.cc:22:24:错误:使用已删除的函数“VariableDataStruct::~VariableDataStruct” 可变数据结构; ^ unionstring2.cc:18:11:注意:'VariableDataStruct::~VariableDataStruct'被隐式删除,因为默认定义的格式可能不正确: }可变数据结构; ^
unionstring2.cc:18:11:错误:使用已删除的函数“VariableDataStruct:::~”

您遇到的错误不是关于访问union,而是关于无法实例化您的结构:

您需要为您的结构提供一个构造函数,以便合理地初始化联合体。

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

改用

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