2011-11-03 85 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

相关问题