[英]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)timeflag
是r-values
。 与l-values
不同,不能对其进行修改或分配,而普通timerdata
和timeflag
是l-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.