我一直试图解决这个问题好几个小时了。虽然我发现了一些类似的问题,但它只是不起作用。 我在结构中有一个联合。现在我想初始化这个struct的const变量。
struct length
{
int minutes;
int seconds;
};
typedef struct article
{
char name[MAXLENGTH_A]
double price;
char type;
union size
{
int pages;
struct length blength;
} bsize
} art;
现在我想初始化这个struct的const变量。我在某处读到以下内容应该有效,但事实并非如此。我总是得到错误: C2224:' .pages'左边的操作数。不是阶级,结构或联合 C2078:对许多初始化程序
const art book = {"Title", 24.99, NORMAL, { .pages = 50}};
我知道这个例子可以更轻松地解决。但我真正的问题是,初始化联盟的第二个元素,如下所示:
const art book = {"Title", 24.99, AUDIO, { .blength.seconds = 40}};
第一次初始化和第二次初始化都不起作用。 有人能告诉我它是怎么回事吗?我正在使用C99 btw。
答案 0 :(得分:1)
{ .pages = 50}
构造是指定的初始化程序,这是MS C编译器不支持的C99功能(我告诉C89编译器)。这也限制了您仅通过其第一个成员初始化联合的能力。
我可以看到这些限制的方法:使用{ 50 }
来初始化pages
。然后忘记const
并明确初始化.blength.seconds
。 const
声明对象的效果是高估的: - )
答案 1 :(得分:-1)
您需要初始化分钟和秒 您不需要明确指定成员名称 {"标题",24.99,NORMAL,50,40} 应该排序你的问题
Key是成员页面和length.minutes占用与union内部相同的内存空间
希望有所帮助