【问题标题】:Data definition has no type or storage class数据定义没有类型或存储类
【发布时间】:2012-03-13 07:27:05
【问题描述】:

我试图为结构指针分配存储空间。这是缩写代码 - 你能告诉我我做错了什么吗?

可以.h

#ifndef CAN_H_
#define CAN_H_

typedef struct {
  u32  id;
  u32  mask;
  char length;
  char data[8];
  char status; 
} CAN_PACKET;

项目.c

#include "can.h"

CAN_PACKET *packet_Tx, *packet_Rx;
CAN_PACKET packet1, packet2;
packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));      /* line 20 in text */
packet_Tx = &packet1; 
packet_Rx = &packet2;

int main(void)
{
  while(1)
  {
        }
}

我收到以下错误/警告:

警告 1 数据定义没有类型或存储类 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5

'packet_Tx' c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5 声明中的警告 2 类型默认为 'int'

“packet_Tx”c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5 的错误 3 冲突类型

错误 4 先前声明 'packet_Tx' 在这里 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 18 13 Can5

警告 5 初始化从没有强制转换的指针中生成整数 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 14 Can5

当 packet_Tx 分配行被注释掉时,其余代码可以正常运行。非常感谢各位。

【问题讨论】:

  • 什么不起作用?你怎么知道?你后来对 packet_pt 做了什么?
  • 你的例子是 100% 正确的,所以“没用”有点含糊……不过,请不要在 C 中对 malloc() 调用的返回值进行类型转换。跨度>
  • 编译器不断抱怨“packet_pt”的冲突类型。如果我注释掉 packet_pt 分配行,则代码无误。这就是为什么我有点困惑。
  • 您不会“为指针分配存储空间”。相反,您分配存储空间,并且您有一个指向该存储空间的指针。指针本身已经存储在某个地方。
  • 下面我显示来自编译器的错误消息...警告1:数据定义没有类型或存储类.....警告2:类型默认为'packet_pt声明中的'int' '... 错误 3:'packet_pt' 的类型冲突.... 错误 4 先前声明的 'packet_pt' 在这里.... 警告 5:初始化从没有强制转换的指针生成整数.... 错误 6:初始化器element is not constant......上面所有的cmets都引用了第一个赋值语句,除了注释4引用指针声明语句..我很困惑。

标签: c pointers struct malloc typedef


【解决方案1】:

在 C 语言中,您不能在函数之外编写代码。移动这两行:

packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
packet_Tx = &packet1; packet_Rx = &packet2;

main()方法的顶部:

int main(void)
{
   packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
   packet_Tx = &packet1; packet_Rx = &packet2;

【讨论】:

  • 我再次检查,只是为了确保 main() 中只有一个 packet_pt... 还有其他想法吗?谢谢
  • @greywolf274 我们需要更多信息 - 请参阅我对您问题的评论。另外,您是复制并粘贴代码sn-ps,还是将它们重新写出来?如果您再次将它们写出来,请注意您在提出问题时没有不小心纠正错误;)
  • 它起作用了,我太急于把那个数据包作为全局变量,我什至在 main() 之外将存储分配给它们..非常感谢..有趣,我确实纠正了我的错误当我在我的问题中编写代码时......哈哈......再次感谢......
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多