Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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
C++;使用嵌套并集定义结构时需要表达式 我在C++中有一个嵌套的联合结构,如下: typedef枚举{ 瓦尔布尔, 瓦鲁尼, 瓦卢号, }价值类型; 类型定义结构{ 值类型; 联合{ 布尔布尔; 双数; }as; }价值观;_C++_Struct_C Preprocessor_Union_Preprocessor Directive - Fatal编程技术网

C++;使用嵌套并集定义结构时需要表达式 我在C++中有一个嵌套的联合结构,如下: typedef枚举{ 瓦尔布尔, 瓦鲁尼, 瓦卢号, }价值类型; 类型定义结构{ 值类型; 联合{ 布尔布尔; 双数; }as; }价值观;

C++;使用嵌套并集定义结构时需要表达式 我在C++中有一个嵌套的联合结构,如下: typedef枚举{ 瓦尔布尔, 瓦鲁尼, 瓦卢号, }价值类型; 类型定义结构{ 值类型; 联合{ 布尔布尔; 双数; }as; }价值观;,c++,struct,c-preprocessor,union,preprocessor-directive,C++,Struct,C Preprocessor,Union,Preprocessor Directive,我正在尝试构建一个#define函数,以使初始化这些值更具可读性,这是我迄今为止所做的,但它没有编译: #定义数字(值){VAL(值{VAL)数字{.NUMBER=value}}) 当使用NUMBER\u VAL(VAL)时,上述实现在编译时生成以下错误:需要一个表达式 这里的目标是通过编写以下内容来定义值: double dub=1.23; val值=数字值(dub); 或者将其传递给函数,如下所示: void进程_值(值); ... 双dub=45.6; 过程值(数字值(dub));

我正在尝试构建一个
#define
函数,以使初始化这些值更具可读性,这是我迄今为止所做的,但它没有编译:

#定义数字(值){VAL(值{VAL)数字{.NUMBER=value}})
当使用
NUMBER\u VAL(VAL)
时,上述实现在编译时生成以下错误:
需要一个表达式

这里的目标是通过编写以下内容来定义

double dub=1.23;
val值=数字值(dub);
或者将其传递给函数,如下所示:

void进程_值(值);
...
双dub=45.6;
过程值(数字值(dub));
有没有办法将这个
#define
-ition转换成一个表达式,让我可以这样使用它?还是我在这里唯一的选择就是写一个合适的函数来为我构建这些结构


为了记录在案,我知道下面的方法会奏效,但我希望能有更简洁的方法

Value NUMBER\u VAL(双值){
价值增值;
val.type=val_编号;
val.as.number=值;
返回val;
}


<>在C++中可以有构造函数。在您的
结构中
可以定义构造函数重载来初始化联合成员以及联合标记,即
类型

您的代码对我有效。你使用什么编译器?我使用VisualStudio 2017中的任何东西Visual C++ 2015 140.24215c++没有指定的初始化器。它也不需要typedef。所有这些看起来像C.,你确定你想要一个C++解决方案吗?C++解决方案将使用构造函数,而不是宏。这是代码从C解决方案移植到C++解决方案中的结果。但是,我的印象是C++实际上是C的超集,所以这是一些潜C语法。正如@DeveloperPaul所指出的,这在其他地方也适用,因此我的编译器和/或编译器标志肯定存在一些问题。如果我在这里找不到问题,我可能最终声明为“代码>值<代码>。C++不是C的超集,并且它没有指定的初始化器。GDB不是编译器,所以它接受C和C++语法的事实是不相关的。除C++中默认的NeNe能见度之外,结构> <代码>和<代码>类<代码>之间没有区别(<代码> >公共<代码> > <代码>结构> <代码>和<代码>私下<代码> > <代码>类<代码>。