2012-09-14 5 views
0
나는 다음과 같이 내 컴파일러에서 오류를 얻고있다

:포인팅 구조체의 포인터 멤버

C51 컴파일러 V9.01 - SN : C1ADC-HAI60D 저작권 KEIL ELEKTRONIK GmbH의 1987 - LINE 2009 * 경고 C260 '=': SEQUENCE.C의 300 포인터 절단 * ERROR C190 SEQUENCE.C 라인 301 :

다음은 내 코드가 아닌 좌변 : '&'

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); 
    } 
+1

구조체 선언 다음에';'를 잊어 버렸습니다. 나는 그것을 고칠 유일한 포인트라고 생각하지 않는다. 타입 선언은 아주 이상하다. –

+0

어떤 라인이 300 라인입니까? 301은 어느 것인가? – Jens

답변

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

위의 질문에 대한 코드를 확인하십시오. 컴파일러 오류는 실제 범죄 이후 여러 줄로보고되는 경우가 많습니다.

+1

'bdata'와'data' 데이터 유형은 Keil에 의해 정의됩니다 : [here] (http://www.keil.com/support/man/docs/c51/c51_le_bdata.htm) – gaganbm

3

어떤 줄이 301이라고 생각하나요?

문제점, 내가 이해 현재 위치 :

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

(unsigned int)timerdata(unsigned char)timeflag 값이며, r-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; 쓰기 것 :

아마도 구조가 도움이 될 재정의.