为什么不允许在其元素中使用结构变量本身?

时间:2014-12-11 14:05:20

标签: c++ c struct

为什么不允许声明具有自己的标识符的结构作为其元素?其中作为自引用结构,由结构的同一变量用指针符号声明!

这是我试过的代码:

 #include<stdio.h>
    #include<conio.h>
    struct am
    {
     int a;
     struct am k; // this reported an error
    };

这段代码报告了一个错误,当我用它作为指针接受它时,我搜索了网络,我开始知道它被称为自引用结构

#include<stdio.h>
    #include<conio.h>
    struct ko
    {
     int a;
     struct ko * op; // this was allowed by my compiler
    };

这个结构工作请告诉我!

我正在使用borland international inc。的

2 个答案:

答案 0 :(得分:9)

对象不能包含与自身类型相同的对象;这是不合逻辑的,因为它需要比自身更大。

正如你所说,它可能包含指针或引用,但不包含对象。

  

我使用的是Borland international inc。的

我不知道你为什么要使用一个已有二十年历史的编译器,以及现在很少有人记得的C ++古老方言。但这和现在一样不可能。

答案 1 :(得分:1)

有两个原因:

  1. struct am类型不是完成,直到结构定义的结束}为止;当您尝试将k声明为struct am的实例时,编译器仍然不知道struct am需要多大。

  2. 结构不能包含自身的实例,因为该成员还必须包含自身的实例,该实例将包含自身的实例, ad inifinitum ;产生的对象将是无限大的。

  3. 结构可以包含指针到同一类型的实例,因为a)您可以创建指向不完整类型的指针,以及b)所有结构指针类型具有相同的大小和表示。