2013-05-30 56 views
0

我想修改一個通過使用指針作爲參數傳遞的結構,我無法讓它工作。我不能只返回結構,因爲函數必須返回一個整數。我如何修改函數中的結構?這是我迄今所做的:在我試圖修改的所有行修改作爲指針傳遞的結構 - C

typedef enum {TYPE1, TYPE2, TYPE3} types; 

typedef struct { 
       types type; 
       int act_quantity; 
       int reorder_threshold; 
       char note[100]; 

}elem; 

int update_article(elem *article, int sold) 
{ 
    if(*article.act_quantity >= sold) 
    { 
     article.act_quantity = article.act_quantity - sold; 
     if(article.act_quantity < article.act_quantity) 
     { 
      strcpy(article.note, "to reorder"); 
      return -1; 
     } 
     else 
      return 0; 
    } 
    else if(article.act_quantity < venduto) 
    { 
     strcpy(*article.note, "act_quantity insufficient"); 
     return -2; 
    } 


} 

我得到這個錯誤:「‘act_quantity’的東西不是一個結構或聯合」錯誤:請求成員」結構。

編輯:我曾使用「。」而不是「 - >」。我現在修好了。它仍然給我一個錯誤:「一元無效類型參數'*'(有'int')」

+0

閱讀有關' - >'運營商。 – Jack

+0

嘿你有沒有理清你的無效類型參數錯誤?請檢查[this](http://stackoverflow.com/questions/5455866/error-invalid-type-argument-of-unary-have-int)是否有類似的錯誤。把它仍然沒有整理出來指出的路線。也許我可以幫忙。我假設你的問題中的代碼是舊的。 –

回答

9

Operator Precedence原因

*article.act_quantity 
更換 .

被解釋爲*(article.act_quantity)

應該(*article).act_quantityarticle->act_quantity(當LHS是一個指針)

+1

@Arlind認真地說,使用箭頭(' - >')語法,它更容易。 – unwind

1

它應該是ptr->member,而不是ptr.member處理指針時。

5

當你引用指向一個結構,你需要或者

article->act_quantity 

(*article).act_quantity 
0

您不必返回一個指針的結構,因爲它仍然會保持一樣輸入。您將地址傳遞給該函數,並使用此地址處的內容。沒有必要在這種情況下

article返回與結構有關的一切事情的指針,因此你不能只用article.act_quantity,你應該用->

article->act_quantity

2

變化*article.act_quantity(*article).act_quantity,或更好地article->act_quantity等運算符優先級讓你在這裏...

0

使用箭頭運營商成員訪問使用結構指針的結構。但有效的記憶必須在那裏。

0

此:

strcpy(*article.note, "act_quantity insufficient"); 

將無法​​正常工作,note是一個字符數組,你不能derference它。您需要:

strcpy(article->note, "act_quantity insufficient"); 
0
  • 它仍然給我的錯誤: 「的一元無效的類型參數 '*' (有 '詮釋')」

因爲你寫*article->act_quantity而不是article->act_quantity。修復它

1

這應該可以解決這個問題

int update_article(elem *article, int sold) 
{ 
    if(article->act_quantity >= sold) 
    { 
     article->act_quantity = article->act_quantity - sold; 
     if(article->act_quantity < article->reorder_threshold) 
     { 
      strcpy(article->note, "to reorder"); 
      return -1; 
     } 
     else 
      return 0; 
    } 
    else if(article->act_quantity < sold) 
    { 
     strcpy(article->note, "act_quantity insufficient"); 
     return -2; 
    } 
}