con*_*Kid 40 c struct dereference
我有一个结构定义为:
struct {
char name[32];
int size;
int start;
int popularity;
} stasher_file;
Run Code Online (Sandbox Code Playgroud)
以及指向这些结构的指针数组:
struct stasher_file *files[TOTAL_STORAGE_SIZE];
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我正在指向结构并设置其成员,并将其添加到数组中:
...
struct stasher_file *newFile;
strncpy(newFile->name, name, 32);
newFile->size = size;
newFile->start = first_free;
newFile->popularity = 0;
files[num_files] = newFile;
...
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:取消引用指向不完整类型的指针
每当我试图访问里面的成员newFile.我究竟做错了什么?
AnT*_*AnT 49
您没有定义struct stasher_file第一个定义.您定义的是无名结构类型和该类型的变量stasher_file.由于struct stasher_file代码中没有此类型的定义,因此编译器会抱怨类型不完整.
为了定义struct stasher_file,您应该按如下方式完成
struct stasher_file {
char name[32];
int size;
int start;
int popularity;
};
Run Code Online (Sandbox Code Playgroud)
请注意stasher_file名称放在定义中的位置.
Bri*_*ndy 13
您正在使用指针newFile而不为其分配空间.
struct stasher_file *newFile = malloc(sizeof(stasher_file));
Run Code Online (Sandbox Code Playgroud)
您还应该将结构名称放在顶部.您指定stasher_file的位置是创建该结构的实例.
struct stasher_file {
char name[32];
int size;
int start;
int popularity;
};
Run Code Online (Sandbox Code Playgroud)
Dir*_*irk 10
你是如何实际定义结构的?如果
struct {
char name[32];
int size;
int start;
int popularity;
} stasher_file;
Run Code Online (Sandbox Code Playgroud)
将被视为类型定义,它缺少一个typedef.如上所述,您实际上定义了一个名为的变量stasher_file,其类型是一些匿名结构类型.
尝试
typedef struct { ... } stasher_file;
Run Code Online (Sandbox Code Playgroud)
(或者,正如其他人已经提到的):
struct stasher_file { ... };
Run Code Online (Sandbox Code Playgroud)
后者实际上匹配您对该类型的使用.第一种形式要求您删除structbefore变量声明.
上面的案例是针对一个新项目.我在编辑一个完善的库的fork时遇到了这个错误.
typedef包含在我正在编辑的文件中,但结构却没有.
最终的结果是我试图在错误的地方编辑结构.
如果您以类似的方式遇到此问题,请查找编辑结构的其他位置并在那里进行尝试.