我不明白为什么会收到此错误。我试过谷歌,但我认为我的代码似乎正确... 主要是我有这个:
Database *database;
database = (Database *)malloc(db_sizeOfStruct());
database->key = "word";
在我的模块文件中,我有这个:
typedef struct database {
char key;
char value;
struct database *next;
} Database;
int db_sizeOfStruct() {
return sizeof(struct database);
}
编译器给出“解除指向不完整类型的指针”,为什么?我试图理解指针,我想它可能是关于它们的......
答案 0 :(得分:6)
如果main()
中的代码无法访问struct
的声明,则无法像使用它一样使用它。
将声明公开(在module.h
中)或在模块内进行分配。
此外,您无法将字符串(char *
)分配给单个char
,但这是一条不同的错误消息。
答案 1 :(得分:1)
问题是key
,这是一个字符。您正尝试将指向char的指针指定给char。
答案 2 :(得分:1)
因为这完全可以编译:
#include <stdlib.h>
typedef struct database {
char key;
char value;
struct database *next;
} Database;
int db_sizeOfStruct() {
return sizeof(struct database);
}
int _tmain(int argc, _TCHAR* argv[])
{
Database *database;
database = (Database *)malloc(db_sizeOfStruct());
database->key = 'w';//"word";
return 0;
}
我假设你在一个main不知道的单独文件中有这个:
typedef struct database {
char key;
char value;
struct database *next;
} Database;
int db_sizeOfStruct() {
return sizeof(struct database);
}
然后这个主要人员不知道Database
是什么:
int _tmain(int argc, _TCHAR* argv[])
{
Database *database;
database = (Database *)malloc(db_sizeOfStruct());
database->key = 'w';//"word";
return 0;
}
另外,请参阅将"word"
分配给char
,这显然不是故意的。
答案 3 :(得分:0)
Key
的类型为char,但"word"
是字符串文字,表示其类型为char *
答案 4 :(得分:0)
您的结构定义应如下所示:
typedef struct database {
char *key;
char value;
struct database *next;
} Database;
看看
char *key;
您以前的成员是:
char key;
只有一个字符无法容纳指向“word”字符串的指针。
无论如何,我从未见过使用函数返回某种类型的大小。
malloc(sizeof(struct database));
难看?