所以我在这里有点困惑。我正在开发一个更大的项目,但遇到了一些问题,所以我用一个简单的结构编写了一个小测试用例:
#include <stdio.h>
typedef struct{
int property1;
}test;
int main(){
test testing = getNumber();
printf("%d",testing.property1);
return 0;
}
test getNumber(){
test testing = {2};
return testing;
}
我要做的就是从getNumber()返回的测试结构中读取一个属性。但是,编译器抱怨以下错误:
test.c(8):错误C2440:'初始化':无法从'int'转换为'test'
所以我的问题是:尽管我指定了一个测试返回类型,为什么这个函数试图返回一个int?我该如何解决?我只是对简单的事情视而不见了吗?
答案 0 :(得分:5)
你错过了一个原型:
#include <stdio.h>
typedef struct{
int property1;
}test;
test getNumber(void); // <<< missing prototype
int main(){
test testing = getNumber();
printf("%d",testing.property1);
return 0;
}
test getNumber(void){
test testing = {2};
return testing;
}
答案 1 :(得分:2)
这里的错误信息有点含糊不清。 c函数的默认返回类型是int
。编译器报告说它无法进行从int
到test
的转换。但事实上,它失败了,因为它不知道getNumber()
是什么。编译器错误消息应该更清楚地说明对getNumber()
的未定义调用或这些行上的某些事情。
C编译器采用从上到下的方法。使用什么变量,函数调用应该事先为它所知。所以当编译器看到以下语句时 -
test testing = getNumber();
直到此时它不知道getNumber()
是什么。所以,你有两个选择让编译器开心。
main()
上方。