要求成员提供非结构或联合的东西

时间:2019-05-11 06:54:17

标签: c compiler-errors

我有一个这样定义的结构:

typedef struct spi_device device_t;

struct spi_device {
  int a;
  int b;
  int c;
};

在包含文件中定义。

在源文件中,

static device_t my_main_dev = 
{
  .a = 2,
  .b = 3,
  .c = 4,    
};

我已确保包含文件包含在源文件中。

但是,当我编译这段代码时,我得到了错误“请求成员'a'而不是结构或联合”。我无法纠正此问题。

我读过几篇有关此问题的文章,但都没有说在结构对象初始化期间遇到错误时可以做什么。在这方面的任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

您没有提供出现问题的可编译源文件。该诊断可能与源文件中发布的内容有关。

如果警告确实指向所发布的代码,请执行以下一些解释:

  • 您的编译器不支持C99扩展。这些在今天非常罕见,但是一些针对嵌入式处理器的旧编译器比较笨拙,就像旧猴子一样,无法接受新的技巧。
  • 您的编译器配置为拒绝c99扩展名(使用-std=c89-ansi)。

要解决这些限制,可以对结构初始化程序使用经典语法:

static device_t my_main_dev = { 2, 3, 4 };

答案 1 :(得分:0)

这是一个愚蠢的错误。我错过了其中一个字段的逗号。放回去可以解决编译器错误。对不起,麻烦了。