C++ C++;Union/Struct';printColorPicker::printColorPicker(无效)和#x27;:试图引用已删除的函数
你好,无情的社区,我今天指望你的帮助 请看noob的密码 错误在第20行(我将对其进行注释以便您可以看到) 错误:“printColorPicker::printColorPicker(void)”:尝试引用已删除的函数C++ C++;Union/Struct';printColorPicker::printColorPicker(无效)和#x27;:试图引用已删除的函数,c++,struct,reference,unions,C++,Struct,Reference,Unions,你好,无情的社区,我今天指望你的帮助 请看noob的密码 错误在第20行(我将对其进行注释以便您可以看到) 错误:“printColorPicker::printColorPicker(void)”:尝试引用已删除的函数 #include <iostream> using namespace std; enum availableColors { incolorPrint, colorPrint }; un
#include <iostream>
using namespace std;
enum availableColors {
incolorPrint,
colorPrint
};
union printColorPicker {
struct incolorPrint {
int id;
char* details = "No color ink eh?";
} i;
struct colorPrint{
int id;
char* details = "Unicorn mode on";
} c;
} color; //line 20
void colorPicker(availableColors c){
char* option;
switch (c) {
case incolorPrint: {
option = color.i.details;
}
break;
case colorPrint: {
option = color.c.details;
}
break;
}
cout << option;
}
void main(){
colorPicker(colorPrint);
}
#包括
使用名称空间std;
枚举可用颜色{
彩色印刷品,
彩色印刷
};
联合印刷选色器{
结构不着色印刷{
int-id;
char*details=“没有彩色墨水吗?”;
}一,;
结构彩色打印{
int-id;
char*details=“独角兽模式开启”;
}c;
}色彩//第20行
无效颜色选择器(可用颜色c){
字符*选项;
开关(c){
不褪色印刷:{
选项=color.i.详细信息;
}
打破
外壳彩色打印:{
选项=颜色c.详细信息;
}
打破
}
cout我对union
的疯狂不太熟悉,但是当你为details
提供一个默认值时,你实际上是在提供一个默认构造函数。当这种情况发生时,struct
不再是聚合类型,也被称为POD。这种非聚合性通过nion也不再是聚合类型,它在构造时调用已删除的默认构造函数(聚合类型在构造时不调用构造函数,其行为与C对象完全相同)
EDITunion
只要求其成员是可平凡构造的。通过提供默认值,struct
将不再是可平凡构造的。允许聚合类型与受保护的private
/成员之间的差异
解决此问题的方法是删除详细信息的默认值
,并在构建后分配给它们,可能是通过工厂函数
顺便说一句,为一个联合体的不同对象设置默认值是没有意义的,值应该是哪一个?因此构造函数应该有联合体的名称,没有参数?我不明白你为什么在代码中使用联合体。这是一个家庭作业,联合体是要求之一。看起来像ey在教你一些不好的东西。对不起,我的第一条评论是误导性的。如果你检查错误消息,你会更清楚地看到哪里出了问题。