2013-11-22 71 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

相關問題