【问题标题】:Compiler thinks struct is pointer to struct编译器认为 struct 是指向 struct 的指针
【发布时间】:2011-11-29 01:34:15
【问题描述】:

我声明了一个结构数组,并想声明一个可以复制的第二个,以便在每个单元测试开始时重新初始化结构。

所以,我在 2 个头文件中声明

extern peripheralsArray_t Peripherals;  
extern peripheralsArray_t DefaultPeripherals;

在 2 个 c 文件中

peripheralsArray_t Peripherals =
{... init  values };
peripheralsArray_t DefaultPeripherals;

但是,当我尝试分配 DefaultPeripherals = Peripherals; 时,GCC 编译器(在 Cygwin 下)说

error: incompatible types when assigning 
       to type ‘peripheralsArray_t’ from type ‘struct _peripherals *’

为什么它认为Peripherals 是一个指针?

【问题讨论】:

  • 问题一定出在其他地方。 _peripherals 来自哪里?
  • 如果你展示了peripheralsArray_t的定义,你可能会得到更好的答案。
  • peripheralsArray 的定义如果一直使用又有什么关系呢?

标签: c gcc struct


【解决方案1】:

假设您的类型名称是描述性的并且peripheralsArray_t 确实是一个数组

C 不支持数组赋值,这是您正在尝试做的。

因此编译器在 RHS 上下文中看到一个数组并推断它应该衰减为一个指针,然后该指针具有错误的类型。

【讨论】:

  • +1 是的,它是一个数组。好的,我将逐个元素分配,或使用 memcpy() (不需要“深度复制”。感谢您的回答
【解决方案2】:

您不能分配给数组。我假设peripheralsArray_t 是一个类型定义的数组(这也几乎总是一个坏主意)。

【讨论】:

  • 只是好奇,为什么 typedef 数组是坏事?
  • @Mawg:因为 1) typedefs 旨在用于会因某些环境条件而改变的类型,而不仅仅是隐藏另一种类型的类型,以及 2) 你的数组类型不是不透明的。 typedef'ing 指针(数组)如果它本质上是一个黑盒子,它可以是可以的,但你的不是,它只会使代码更难理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
相关资源
最近更新 更多