Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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++翅膀。我的问题是,如果我有这样一个结构: struct Height { int feet; int inches; };_C++_Struct_Anonymous Types - Fatal编程技术网

C++;初始化匿名结构 我还在挣我的C++翅膀。我的问题是,如果我有这样一个结构: struct Height { int feet; int inches; };

C++;初始化匿名结构 我还在挣我的C++翅膀。我的问题是,如果我有这样一个结构: struct Height { int feet; int inches; };,c++,struct,anonymous-types,C++,Struct,Anonymous Types,然后我有一些这样的句子: Height h = {5, 7}; Person p("John Doe", 42, "Blonde", "Blue", h); 我喜欢通过大括号初始化结构,但我更喜欢上面的一行,在匿名高度结构中。我该怎么做?我最初天真的做法是: Person p("John Doe", 42, "Blonde", "Blue", Height{5,7}); 但这不起作用。我离这个标志有多远? 你不能,至少在当今的C++中是不行的。大括号初始化是初始化器语法的一部分,不能在其他地

然后我有一些这样的句子:

Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
我喜欢通过大括号初始化结构,但我更喜欢上面的一行,在匿名高度结构中。我该怎么做?我最初天真的做法是:

Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});

但这不起作用。我离这个标志有多远?

你不能,至少在当今的C++中是不行的。大括号初始化是初始化器语法的一部分,不能在其他地方使用

您可以将构造函数添加到
高度

struct Height
{
    Height(int f, int i) : feet(f), inches(i) { }
    int feet, inches;
};
这允许您使用:

Person p("John Doe", 42, "Blonde", "Blue", Height(5, 7));
不幸的是,由于
Height
不再是聚合,因此不能再使用大括号初始化。构造函数调用初始化同样简单,不过:

Height h(5, 7);

标准C++(C++ 98,C++ 03)不支持这个。 g++支持是一种语言扩展,我似乎记得C++0x将支持它。您必须检查g++语言扩展和/或可能的C++0x的语法

对于目前的标准C++,只需命名<代码>高度> /Cube >实例,如您已经做过的,然后使用名称.< /P>


干杯&hth.,

这可能只是一个例子,但是,最好将
高度
存储为单个
英寸
字段。当你需要脚的时候,你可以把它转换成脚;处理单个单元要比处理多个单元容易得多,特别是因为现在你可以有多个相等的值,但是没有相同的表示(例如,
{2,3}
{1,15}
)。C++1x附带了它,它将支持类似的东西。很可能您的编译器已经支持它了。在Person构造函数中指定
(结构高度){5,7}
(如果通过引用传递)(或者如果传递指针)而不是
(结构高度){5,7}
。您基本上是将初始值设定项列表强制转换为所需的类型。这是一个C99 +的特性,但应该可以用C++。我不知道结构可以有构造函数/初始值设定项列表。@byte:A
struct
完全相同。唯一的区别是,基类和成员在默认情况下对于
结构
是公共的,对于
是私有的。它是自动提供的,还是您必须定义一个接受
初始值设定项列表
参数的构造函数?@Ben:不,您不必定义一个构造函数来获得C++0x语法。重点/目标是要有一个在大多数情况下都能使用相同语法的统一语法。查看@sbi之前给出的示例。或者,如果您需要详细信息,可以从中获取最新的草稿,格式为PDF。