【问题标题】:Array type has incomplete element type?数组类型的元素类型不完整?
【发布时间】:2016-02-18 09:32:07
【问题描述】:

我正在尝试编写一个程序,将信息从内核空间传递到 ububtu 14.04 上的用户空间。我声明了一个struct,如下:

typedef struct
{
   long pid;
   char TTY[64];
   unsigned long long time; 
   char COMM[64]
  } myTasks; 

然后,我在 main 中创建一个 myTasks 结构数组,例如:

struct myTasks taskInfo[2500]; 
//do stuff 
syscall(__NR_my_syscall2,numTasks,sizeof(taskInfo),taskInfo); // use it here

但是,当我这样做时,我在这一行收到一条错误消息:

struct myTasks taskInfo[2500] 错误:数组类型的元素不完整

我做错了什么?我想创建一个 myTasks 结构数组,我可以将其作为缓冲区传递给系统调用......但我不知道我做错了什么。我是C 的新手,因此我们将不胜感激。

【问题讨论】:

标签: c arrays struct ubuntu-14.04 system-calls


【解决方案1】:

你 typedefed 匿名结构到 myTasks。要声明您的数组,请使用myTasks taskInfo[2500]。

C 认为您正在声明一个新的 named 结构 struct myTasks,它是不完整的,因为您没有定义该结构。但是,myTasks 是您已经定义的结构的别名。

【讨论】:

  • 哦..所以我对结构的理解有问题吗?所以我应该研究一下this?
  • 是的,这是一个很棒的资源!看起来您只是对结构的命名有些困惑。在您提供的代码中,您定义的结构没有名称;它是匿名的。您将 myTasks 声明为该结构类型的别名。所以这就像为结构分配一个昵称。后来,您尝试声明一个包含struct myTasks 的数组,而struct myTask 实际上并不存在。 C 认为你要在那里声明一个新结构,但由于你没有,它给出了错误。
  • 谢谢!!这更有意义,我肯定会在该链接中阅读更多内容。
【解决方案2】:

myTasks 是 type-alias 而不是结构名称。它的正确用法是例如

myTasks taskInfo[2500];

【讨论】:

  • 感谢您的回答!! :)
猜你喜欢
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多