对不起,我有点尴尬,我不得不问这个问题。我似乎无法发现为什么我使用 - >命令在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 header'),而其他人说(有'struct tag')。
我将在本文的底部包含我的全部代码,但相关的结构声明和调用设置如下:
struct tag the_tag;//The reused tag
^这是一个全局结构变量
struct header intro; //Bytes 0-19 of the program
^这是int main中的本地结构头(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中这个解除引用的理解是不正确的,以及为什么这些调用的工作方式与我期望的一样?我很困惑,我的谷歌/搜索技能在事件方面没有任何变化。谢谢你的帮助。
这是我的pastebin: http://pastebin.com/ck8ThFLG
答案 0 :(得分:4)
a->b
相当于(*a).b
由于intro
的类型为struct header
,因此只需使用.
即可访问其成员,而->
则需要intro_ptr
类型为struct header*
的变量。