Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误C2280:声明C+;时尝试引用已删除的函数+;结构 我有以下C++代码(在VS2017):_C++_C++11_Struct_Constructor_Visual Studio 2017 - Fatal编程技术网

错误C2280:声明C+;时尝试引用已删除的函数+;结构 我有以下C++代码(在VS2017):

错误C2280:声明C+;时尝试引用已删除的函数+;结构 我有以下C++代码(在VS2017):,c++,c++11,struct,constructor,visual-studio-2017,C++,C++11,Struct,Constructor,Visual Studio 2017,当我试图声明此结构时: int main() { Outer obj; }; 我得到编译错误: 错误C2280:'Outer::Outer(void)':尝试引用已删除的 作用 这种声明结构的方式应该可以正常工作。我觉得这个错误与结构的构造函数有关 如何解决此问题?根据: 如果联合包含具有非平凡 特殊成员函数(复制/移动构造函数、复制/移动赋值、, 或析构函数),该函数在union和 需要由程序员明确定义 因此,您需要在internal中为联合定义构造函数和析构函数。但因为这是一个匿名

当我试图声明此结构时:

int main()
{
   Outer obj; 
};
我得到编译错误:

错误C2280:'Outer::Outer(void)':尝试引用已删除的 作用

这种声明结构的方式应该可以正常工作。我觉得这个错误与结构的构造函数有关

如何解决此问题?

根据:

如果联合包含具有非平凡 特殊成员函数(复制/移动构造函数、复制/移动赋值、, 或析构函数),该函数在union和 需要由程序员明确定义

因此,您需要在
internal
中为联合定义构造函数和析构函数。但因为这是一个匿名联盟,你必须先给它起个名字:

struct Inner
{
    int b;
    union A {
        A();
        ~A();
        OptionA optA;
        OptionB optB;
    } Options;
};
你的问题在于

union {
    OptionA optA;
    OptionB optB;
}Options;
内部
中。
OptionA
OptionB
都是可构造的,因此当您对它们进行并集时,它会删除并集的构造函数。这意味着
选项
不是默认可构造的,因此
内部
也不是,因为您没有提供默认构造函数

您需要为联合提供自己的构造函数和析构函数,以处理构造和析构函数正确的成员。您可以看到如何创建标记的并集以正确地销毁该并集

union {
    OptionA optA;
    OptionB optB;
}Options;