0

次のように、コンパイラからエラーが発生します。

C51 COMPILER V9.01 - SN: C1ADC-HAI60D COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009 * SEQUENCE.C の行 300 で警告 C260: '=': ポインターの切り捨て * SEQUENCE.C の行301 でエラー C190: '&':左辺値ではない

以下は私のコードです:

   struct myCond{
    unsigned char currStatus;
    unsigned char prevStatus;
    unsigned int *timer;
    unsigned char *flag;
   }
  struct myCond StatCond;

  unsigned int data timerdata;
  bit bdata timeflag;

  void someSubroutine (void)
  {
    struct myCond *tempCond;

tempCond = &StatCond;
tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);
  }
4

2 に答える 2

3

どの行が 301 であるかを推測する必要がありますか?

私が理解しているように、問題はここにあります:

tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);

(unsigned int)timerdataとは、正確に(unsigned char)timeflagは値です。プレーンである とはr-values異なり、それらを変更したり割り当てたりすることはできません。したがって、 withのアドレスを取得することはできません。それは、たとえば、書くことと同じです。単独ではデータメモリにオブジェクトとして存在しません。l-valuestimerdatatimeflagr-values&&11

代わりに次のように書く必要があります。

tempCond->timer = &timerdata;
tempCond->flag = (unsigned char*)&timeflag;

また、ビット変数のアドレスを取得することが合法であるかどうかはよくわかりません。最後の行はコンパイルに失敗する可能性があります。

おそらく、構造を再定義すると役立つでしょう。

struct myCond{
...
    bit bdata *flag; // or maybe without bdata
   }

そして、あなたは書くでしょうtempCond->flag = &timeflag;

于 2012-09-14T12:36:52.347 に答える
1
unsigned int data timerdata;  // what is 'data', is it defined?
bit bdata timerflag;  // what are 'bit' and 'bdata', are they defined?

上記の私の質問に関してコードを確認してください。コンパイラ エラーは、実際の違反の後に複数行報告されることがよくあります。

于 2012-09-14T12:23:46.943 に答える