2013-02-08 55 views
0

在編譯時出現錯誤:申請會員'型「的東西不是一個結構或聯合

會員'類型請求」的東西不是一個結構或聯合,

這個錯誤發生時,在傳遞的char數組和指向struct的指針上使用strcmp()函數。

我想要做的是傳入一個'字符串',並讓它返回字符串所在數組中的索引。

int returnDuplicate(char word , struct data *value) 
{ 

int i = 0; 
int placefinder = -60; 

for (i ; i <= 50 ; i++) 
{ 

    if (strcmp(word, value.type[i]) == 0) 
    { 
     placefinder = i; 

    } 
} 

return placefinder; 
} 




struct data { 
      char type[50][16]; 
      double whole[50]; 
      double retail[50]; 
      double profit[50]; 
      }; 
+2

其下方的每個回答說: 「用'值 - >鍵入[I]'」 應該腳註你也可以使用'(*值).TYPE [I]'。這兩種形式中的第一種(' - >')可以讓你執行第二種形式('(* var).'),並且輸入少於兩個的字符;是的,那真的是*原因。這個和那個地獄是避免的(我有時候認爲K&R是[Lisp](http://en.wikipedia.org/wiki/Lisp_(programming_language))-haters)。 – WhozCraig

回答

7

你有兩個問題,我看到:

  1. 如果您希望它是(C)字符串,您希望使用char*作爲word參數的類型。不是char

    int returnDuplicate(char* word , struct data *value)

  2. value是指向一個struct data。因此,您必須使用->運營商,而不是.來訪問其成員。

    strcmp(word, value->type[i])

4

在這一行:

if (strcmp(word, value.type[i]) == 0) 

您嘗試訪問的valuetype領域,但value是一個指向struct,而不是一個struct本身。嘗試改變該行

if (strcmp(word, value->type[i]) == 0) 

,你得到的是經典的「你用.代替->」從gcc錯誤的錯誤。一旦你看到了足夠多的時間,你就會感受到它的意義。

希望這會有所幫助!

+0

+1爲你:) –

2

當你逝去的value爲指針結構,所以你需要使用->操作符來訪問結構的區域,而不是.

if (strcmp(word, value->type[i]) == 0) 
相關問題