[英]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.