Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++;未命名类型化结构成员_C++ - Fatal编程技术网

C++ C++;未命名类型化结构成员

C++ C++;未命名类型化结构成员,c++,C++,首先,我将从什么起作用开始: 结构A { INTA,b; }; 结构 { A_;//成员可以在其他位置定义。 结构B { int c,d; };//成员可以在本地定义。 B B_; 结构C { int e,f; }C_;//成员可以在同一行上实例化。。。 C C2_;/…并且该定义仍然有效。 结构 { int g,h; }D_;//可以在不使用类型名的情况下定义成员并命名。 //(而且很明显,事后也没有办法提出实例) 结构 { int i,j; };//可以不使用类型名定义成员,也可以不命名成员

首先,我将从什么起作用开始:

结构A { INTA,b; }; 结构 { A_;//成员可以在其他位置定义。 结构B { int c,d; };//成员可以在本地定义。 B B_; 结构C { int e,f; }C_;//成员可以在同一行上实例化。。。 C C2_;/…并且该定义仍然有效。 结构 { int g,h; }D_;//可以在不使用类型名的情况下定义成员并命名。 //(而且很明显,事后也没有办法提出实例) 结构 { int i,j; };//可以不使用类型名定义成员,也可以不命名成员。 //(而且很明显,事后也没有办法提出实例) }; 可以在代码中直接访问未命名结构(和未类型化结构)的成员(这是非标准扩展):

intmain()
{
S S;
s、 一,;
s、 j;
}
有没有办法创建一个类似的场景,但是使用一个未命名但已键入的成员

struct X
{
结构
{
int k,l;
};
};
int main()
{
X;
x、 k;
x、 l;
}

显然,上面的代码是不正确的,因为
结构Y{…}
被解释为本地结构定义。

现在我想了想,我可以看出我想要的是不可能的

如果这样的事情是允许的,那么它会在

struct X
{
int k,l;
};
结构
{
十、 //未命名(X1)
十、 //未命名(X2)
};
未遂事件解决方案包括:

  • 继承权
结构Y:X{…}; 首先,除了我想要的,这允许继承的所有钟声和口哨声(例如向上投射),这不是我的意图。其次,这只允许有限的内存管理:无法在基之前或在多个基之间插入任何值(至少在不创建虚拟结构的情况下,也可以将虚拟结构升级为虚拟结构),也无法以奇特的方式使用联合。同样,你不能两次继承同一个类型(很明显,这就是我得出这个不一致结论的原因)

  • 硬编码
struct Y
{
联盟
{
X_ux;
结构
{
int k,l;
};
};
};
这只是一个丑陋的,不“健壮”。在这一点上,实际上最好一起放弃这一计划

  • 私人继承与使用
struct Y:private X
{
使用X::k;
使用X::l;
};

这个解决方案可以防止不必要的上传,但它基本上和硬编码的一样混乱(尽管至少它不允许使用不存在的成员)。

可能使用继承<代码>结构X:public Y{}在上一个示例中,
X
实际上没有名为
k
l
的成员。它也没有类型为
Y
的数据成员。它根本没有任何名称的数据成员。@WeiHsieh我正要写一条愤怒的评论,如“显然不是因为多重继承”,然后意识到“显然是因为多重继承”。。。谢谢@IgorTandetnik是的,事实上,如果你仔细观察,你会发现我提到了这一点。非标准并不意味着错误。你可能真的不在乎。我只是想让这个网站的其他读者知道。