我在C中为以下行输入错误“从类型'int'分配类型'memstruct'时出现”不兼容的类型:
result1 = getValueFromBind(interpret(t->ptr1));.
result1和function的声明如下:
memstruct result1;
memstruct getValueFromBind(memstruct bind);
此外,memstruct函数定义如下: typedef union Constant { int intval; char * strval; }不变; typedef struct memstruct { int类型; 恒定价值; } memstruct;
编辑:getValueFromBind函数在简单检查后返回bind或NULL。 解释返回memstruct。此外,错误显示在C中的分配中。
以下是极简主义示例(@gsamaras):http://ideone.com/Rb8ZCd
正如dsh回答的那样,解决了程序中的错误
答案 0 :(得分:6)
您缺少功能getValueFromBind()
的{{3}}。在C中,由于历史原因,假定未声明的函数返回类型int
。在使用函数forward declaration之前声明它,然后编译器将知道正确的返回类型。
答案 1 :(得分:2)
你可以在main()
知道它之前使用这个函数,所以你可以像这样声明它:
#include <stdio.h>
typedef struct memstruct{
int type;
}memstruct;
memstruct interpret(memstruct t); // forward declaration
int main(){
memstruct t1,t2;
t1.type = 1;
t2 = interpret(t1);
return 1;
}
memstruct getValueFromBind(memstruct bind){
return bind;
}
memstruct interpret(memstruct t){
memstruct result1;
result1 = getValueFromBind(t);
return result1;
}
或者您可以在interpret()
之前移动main()
的整个实施。但是,它应该在struct
之后,因为你在函数中使用它。
您可能需要查看此内容:Function Declaration and Function Prototypes