为什么我会“解除指向不完整类型的指针”?

时间:2013-11-22 12:18:03

标签: c pointers struct

我不明白为什么会收到此错误。我试过谷歌,但我认为我的代码似乎正确... 主要是我有这个:

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);
}

编译器给出“解除指向不完整类型的指针”,为什么?我试图理解指针,我想它可能是关于它们的......

5 个答案:

答案 0 :(得分:6)

如果main()中的代码无法访问struct的声明,则无法像使用它一样使用它。

将声明公开(在module.h中)或在模块内进行分配。

此外,您无法将字符串(char *)分配给单个char,但这是一条不同的错误消息。

另外,please don't cast the return value of malloc() in C

答案 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));

难看?