【问题标题】:Excess elements in scalar initializer for structstruct 的标量初始化程序中的多余元素
【发布时间】:2018-05-30 23:00:22
【问题描述】:

我有一个名为 result 的结构体,其定义如下:

struct result {
void** elements;
size_t n_elements;
};

但是当我尝试使用以下属性 { NULL, 0 } 对其进行初始化时,我收到以下警告:

warning: excess elements in scalar initializer
struct result * result_elements = { NULL, 0 };

这是一个错误,因为它需要一个 2D 数组吗?如果是这样,我认为 NULL 是允许的?

干杯:)

【问题讨论】:

  • struct result * result_elements 是一个指针。
  • 您正在尝试使用结构值初始化指针。也许你的意思是struct result * result_elements = &(struct result){ NULL, 0 };

标签: c pointers struct


【解决方案1】:

这是一个指针

struct result * result_elements /**/;

你尝试用

初始化它
{ NULL, 0 }

你可以初始化它,例如使用像

这样的标量初始化器
NULL

您可以使用非标量初始化程序初始化一个单独的(非指针)变量,例如

struct result avariable = { NULL, 0 };

然后你可以像这样初始化你的指针

struct result * result_elements = &avariable;

【讨论】:

  • &(struct result){NULL, 0}
  • Ajay 的解决方案似乎返回了编译错误。 “错误:获取 'struct result' [-Waddress-of-temporary] 类型的临时对象的地址”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
相关资源
最近更新 更多