2011-06-24 149 views
2

这是一个很常见的问题,但我没有得到我的答案,所以再次询问。警告:赋值使得整型指针没有强制转换

我定义为structers:

struct f_lock{ 
       int x; 
       struct f_lock *next; 
    }; 

然后说我有一个函数:

struct f_lock *new_node() 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 

这是我从另一个函数调用:

struct f_lock *new_f_lock; 
new_f_lock = new_node(); //This line gives the error warning:assignment makes pointer from integer without a cast 

将grateull求助 谢谢

+4

您很可能没有在范围内声明'new_node()'的原型。这就是说,最好是发布人们可以用来重现问题的代码。 –

+0

不应该是'function f_lock * new_node()'not'struct f_lock * new_node()'? – Swift

+2

@Mike:在C中,'function'不保留,没有特别的意义。原来的定义是正确的。没有'typedef',类型的名字是'struct f_lock'; 'f_lock'本身没有被定义 – pmg

回答

6

您是否也收到错误implicit declaration of function ‘new_node’?因为在这种情况下,你可能忘记了在你调用它的模块中声明new_node。 (如果你没有得到的错误,重新编译-Wall打开更多的警告。)

警告消息的说明:如果new_node未被正确声明,编译器将假定它返回int,这是一种的默认返回类型(由于历史原因)。

+0

I没有得到错误,但可能是这样的。因为我在同一模块中没有功能 –

+1

@Juggler:将编译器警告提高到最大几乎总是一个好主意。 –

+0

另请参阅GCC手册中的“-Werror”,并将其用于您的优势。 –

1

我似乎记得得到这个(而误导)的错误信息,一旦当我忘了声明函数为采取其在C需要void(但不是C++)的功能,不带参数:

struct f_lock *new_node() 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 

应该是:

struct f_lock *new_node(void) 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 
+0

这是一个古老的答案,但解决了我的谜团 –

相关问题