0

この特定のコード ブロックの最後の行で、「割り当ての左オペランドとして左辺値が必要です」というエラーが生成されます。混乱は、最後の行でこのエラーがスローされ、最後から 2 番目の行ではスローされない理由にあります。

      int p2 = 0;
      spage = find(in.startpage);
      spage->noutgoing++;
      spage->outgoing = (struct webpage *)realloc((spage->outgoing),((spage->noutgoing)*sizeof(struct webpage)));

      epage = find(in.endpage);
      epage->nincoming++;
      epage->incoming = (struct webpage *)realloc((epage->incoming),((epage->nincoming)*sizeof(struct webpage)));


      position = ((epage->nincoming));

      &(epage->incoming[0]) = spage;
      &(epage->incoming[p2]) = spage;

ここでspageepageは以下で定義される構造体です。

struct webpage {
   char name;               /* name of page */
   struct webpage *outgoing;    //array of pointers pointing to outgoing webpages
   struct webpage *incoming ;   //array of pointers pointing to incoming webpages
   int noutgoing;
   int nincoming;
};

関数findは へのポインターを返しますstruct webpage

この問題は、構造体とポインタを double に変更し、最後の行を に変更することで解決されoutgoingましincoming(epage->incoming[p2]) = spage;

エラーが発生した理由はまだわかりませんが...

4

1 に答える 1

0

このコード:

struct S {
    int * p;
};

int main() {
    struct S * s;
    int n;
    &(s->p[42]) = 0;
    &(s->p[n]) = 0;
}

GCC 4.5.1 でコンパイルすると、以下が生成されます。

n.c:9:16: error: lvalue required as left operand of assignment
n.c:10:15: error: lvalue required as left operand of assignment

言い換えれば、どちらの場合も左辺値が必要なエラーを生成します。この正確なコードをコンパイラで試すことができますか?

于 2011-05-13T08:18:54.533 に答える