-2

我有

   struct node
   {
        int value;
       struct node next;
   };

如果我这样做,我会得到一个错误field next has incomplete type

但是当我声明这样的结构时,它工作正常,

     struct node
     {
         int value;
         struct node *next;
     };

为什么会出现这个错误?编译器可以知道结构节点已经被声明。

4

4 回答 4

1

你只能这样做

struct node
{
  int value;
  struct node *next;
};

问候,卢卡

于 2013-06-07T09:04:49.823 回答
1

我不确定是否有人真正正确地回答了您的问题。

由于几个原因,您不能使用结构本身。首先是您现在已经使结构自引用,并且没有办法为它实际分配足够的空间。每次你试图分配它时,它都包含一个它自己,它又包含一个它自己,它又包含一个它自己......永远。所以它需要无限的记忆。其次,编译器还不知道成为那种类型的结构意味着什么,因为它还没有完成。

但是,编译器确实知道指向该结构的指针将占用多少空间——它与指向任何其他类型的指针相同。

此外,由于没有为结构本身分配内存——只是一个指针——没有无限递归。

并且由于没有通过添加指针进行取消引用,因此您不必拥有结构的完整定义即可知道访问结构成员的内存偏移量。这必须等到结构完全定义好。

于 2013-06-07T10:02:52.833 回答
0
struct node
{
   int value;
   struct node *next;
};

这段代码没问题。你只能放一个指向结构的指针

于 2013-06-07T09:05:47.147 回答
0

您可以为不使用 struct 关键字添加 typedef,并且您需要一个指针。

typedef struct node node;

struct node
{
   int value;
   node *next;
};
于 2013-06-07T09:07:48.330 回答