繁体   English   中英

指向结构的指针成员

[英]Pointing struct's pointer member

我从编译器收到如下错误:

C51编译器V9.01-SN:C1ADC-HAI60D版权所有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);
  }

我们是否应该猜测哪条线是301?

据我了解,问题出在这里:

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

(unsigned int)timerdata(unsigned char)timeflag是值, (unsigned char)timeflagr-values l-values不同,不能对其进行修改或分配,而普通timerdatatimeflagl-values 因此,您不能使用&接受r-values地址。 就像写&1 1本身不作为对象存在于数据存储器中。

您应该改写:

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

而且我不太确定采用位变量的地址是否合法。 最后一行可能无法编译。

也许重新定义结构会有所帮助:

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

然后编写tempCond->flag = &timeflag;

unsigned int data timerdata;  // what is 'data', is it defined?
bit bdata timerflag;  // what are 'bit' and 'bdata', are they defined?

关于上述问题,请检查您的代码。 真正的攻击后,编译器错误通常报告为多行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM