對不起,我有點尷尬,我不得不問這個問題。我似乎無法發現爲什麼我在C錯誤中使用 - >命令。我知道'x-> y'等同於'(* x).y',但由於某種原因,我在我的第一個課程項目中錯誤地使用了它。爲什麼我不正確使用' - >'?我知道這可能是一個簡單的概念錯誤,但不知道爲什麼
爲了透視,我的項目中有28個錯誤; 26是來自這種誤解,兩個來自for循環,並且在C99模式之外有初始聲明 - 這對我來說並不重要,因爲我必須將這些代碼轉移到Unix機器上以便在那裏編譯它,所以這些錯誤贏得了'發生。
我得到特定的錯誤是這樣的:
C:\Users\Nick\Documents\School\CS449\Programs\Project 1\EXIF Viewer\main.c|78|error:invalid type argument of '->' (have 'struct tag')|
26個錯誤,每一個構成這樣的,但也有人說(有「結構頭」),而其他人說(有'結構標籤')。
我要包括我的代碼在文章底部的全部,但相關結構聲明和呼叫設置如下:
struct tag the_tag;//The reused tag
^這是一個全球性的結構體變量
struct header intro; //Bytes 0-19 of the program
^這是INT主要本地Struct標頭(ARGC,**的argv){}
一些是給我的這些錯誤的線路有:
56: else if(intro->endianness[0] != 'I')
74: if(the_tag->tag_identifier == (0x010F))
78: printf("Manufacturer: %s\n", the_tag->data);
98: else if(the_tag->tag_identifier == (0x08769))
125: else if(tagger->tag_identifier == 0x8827)
有人可以請解釋我在C中對這個解除引用的理解是不正確的,以及爲什麼這些調用像我期望的那樣工作?我很困惑,而且我的谷歌/搜索技巧對事件沒有任何影響。感謝您的幫助。
這裏是我的引擎收錄: http://pastebin.com/ck8ThFLG
您沒有任何指針。 – SLaks
看起來像你有結構,而不是指向結構的指針。你可以用「。」來引用結構。不是「 - >」。例如intro.endianness –
正如其他人所評論的,您正在使用本地結構,而不是指向結構的指針。爲了說明不同:'struct tag the_tag; the_tag.tag_identifier = 0x10F; struct tag * tag_ptr =&the_tag; tag_ptr-> tag_identifier = 0x10f;' – mkfs