2011-11-03 163 views
0

在一個文件中我有這樣的:爲什麼我需要轉換從函數返回的結構?

​​

調用程序是:

#include <stdio.h> 
#include <stdlib.h> 

int 
main(void) 
{ 
    mynode=example(); 
} 

節點本身是在的defs.h文件我這裏不顯示定義。 我用gcc編譯得到的警告是「調用例程中的賦值使得整型指針沒有轉換」。

更改爲mynode =(struct node *)example();刪除該警告。該例程在任何情況下都有效,但我不明白爲什麼我會收到警告。

+1

'##包括「defs.h」'? –

+0

@JamesMorris - 是的,我包含了defs文件,但忘記了我的頭文件 – Rob

回答

2

在調用example的文件中,返回類型example未知,所以假定返回一個int,您將其分配給struct node *。因此警告。

您應該在調用文件中聲明example的原型(在調用函數之前鍵入struct node* example(void);)或者(更好地)創建名爲example.h的頭文件,在那裏鍵入原型,然後包含調用文件中的頭文件(即,輸入#include "example.h" at the top). The header file thus defines the interface of the file where示例),並且使用函數的文件可以包含頭文件,從而確保所有類型匹配,並刪除任何編譯器警告。

+0

這是問題所在,我有一個頭文件但沒有包含它。 – Rob

4

難道你沒有聲明struct node* example(void)的原型,編譯器認爲它返回int

相關問題