2013-11-22 41 views
0

我不明白为什么我会得到这个错误。我试图谷歌,但我认为我的代码似乎是正确的...... 在主我有这样的:为什么我会得到“解除指向不完整类型的指针”?

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

编译器提供了“提领指针为了不完整的类型“,为什么?我想了解的指针,它的propably一些关于他们我想...

+6

因为你是一个指向不完整类型的指针 – dhein

回答

6

如果main()代码不有权访问struct的声明,您不能像使用它那样使用它。

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

此外,您不能将一个字符串(char *)分配给单个char,但这是一个不同的错误消息。另外,please don't cast the return value of malloc() in C

+1

我明白了!我意外地使用了 - >分配进行测试,我将为此设置一个函数。 – theva

0

Key是char类型,但"word"是一个字符串文字是什么意思它的类型是char *

+0

对于什么投票?..... – dhein

+0

我也不知道。我已经提高了它。 –

+0

因为这不是问题的答案。 – alk

0

你的结构定义应该是这样的:

typedef struct database { 
    char *key; 
    char value; 
    struct database *next; 
} Database; 

char *key; 

你以前的成员是:

char key; 

只是一个单一的字符不能指针抱到“单词”字符串。

无论如何,我从来没有见过使用函数来返回某种类型的大小。

malloc(sizeof(struct database));

难看?

+0

这不是OP引用的错误消息的原因。 – alk

1

问题是key,这是一个字符。你正试图把一个指向char的指针指向char。

+0

这不是由OP引用的错误消息的原因。 – alk

+0

啊!现在我明白了。 char * - > char错误非常明显,我认为这是错误信息的原因。无论如何,稍微更详细的评论会更好。只是“这不是答案”或“这不是理由”并不是很有帮助。 –

+0

有正确的答案。如果觉得没有必要重复这些。阅读并理解错误信息也是一个好主意。在这种情况下,它提到了“解除引用”这个词,它应该很好地解决这个问题。 – alk

1

由于这个编译pefectly:

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

我假设你在一个单独的文件,该文件是未知的,主要有这样的:

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,这显然不能是故意的。

+0

你是对的,有两个单独的文件。包含结构的文件也有一个头文件,其中typedef被定义为“typedef struct database Database;”。我认为那种类型的数据库会在主要被知道吗? – theva

相关问题