我定义了两个记录如下
type
  Plink=^vextnode;
  vextnode=Record
    adjvex:integer;
    nextadj:Plink;
  end;
type
  vexts=Record
    outnum:integer;
    nextvt:^vextnode;
  end;
var
  gvexts:array of vexts;
  gvextnode:^vextnode;在一个过程中用到
              gvexts[i].outnum:=gvexts[i].outnum+1;
              gvextnode^.adjvex:=j;
              gvextnode^.nextadj:=Nil;
              gvexts[i].nextvt:=gvextnode;
编译的时候说我最后一句有错误:Incompatible types;
可是我gvexts[i].nextvt和gvextnode都是vextnode的指针类型,怎么有错误呢?
请教高手!

解决方案 »

  1.   

    我的印象中这样的类型是不同的,比如 
    var
      a: array[0..9] of char; 
      b: array[0..9] of char; 
    中 a 和 b 的数据类型是不同的,如果定义一个类型如:
    type
      CharArray0_9 = array [0..9] of char;这是如果定义:
    var
      a: CharArray0_9;
      b: CharArray0_9;
    这是 a 和 b 就是类型兼容的。
    所以你的定义是不是需要修改一下:
    type
      vexts=Record
        outnum:integer;
        //nextvt:^vextnode;
        nextvt: PLink;
      end;var
      gvexts:array of vexts;
      //gvextnode:^vextnode;
      gvextnode: PLink;这样应该是可以的,为什么这样,我想应该是编译器的问题。
      

  2.   

    是OBJECTPASCAL强类型编译器编译的问题。  Plink=^vextnode
     ^vextnode 人为是两种类型Plink=^vextnode;
      vextnode=Record
        adjvex:integer;
        nextadj:Plink;
      end;
    type
      vexts=Record
        outnum:integer;
        nextvt:Plink;
       end;
    var
      gvexts:array of vexts;
      gvextnode:plink;
    应该可以拉
      

  3.   

    type
      Plink=^vextnode;
      vextnode=Record
        adjvex:integer;
        nextadj:Plink;
      end;
    type
      vexts=Record
        outnum:integer;
        nextvt:^vextnode;//*
      end;
    var
      gvexts:array of vexts;
      gvextnode:^vextnode;//*两个*处的^vextnode 用plink 就好了。
    你若是定义了两个^vextnode,虽然都是vextnode的指针,但却是两个不同的类型,也就是能赋值了。
      

  4.   

    写错一个关键字你若是定义了两个^vextnode,虽然都是vextnode的指针,但却是两个不同的类型,也就不能赋值了。