函数声明隐藏全局声明
Declaration of function shadows a global declaration
因为这是一条常见的错误消息,所以我用 Google 搜索了这个问题。不幸的是,我所能找到的都是线程,其中问题是由具有相同名称的全局变量和局部变量引起的。我的问题与全局变量无关,所以我认为这是一个新问题。 C 不让我调用函数。每次我调用这样的函数时
...
adjusted_scores = *new_scores(scores,days_late,penalty);
numeric_score = final_score(adjusted_scores, weights);
...
,支持代码
int * new_scores(int scores[], int days_late[], int penalty) {
int new_scores[MAX_ASSIGNMENTS];
/*computes size of array*/
int size = sizeof(scores)/sizeof(scores[0]);
int i;
for(i=0;i<size;i++){
new_scores[i]=scores[i]-penalty*days_late[i];
}
return new_scores;
}
对于有问题的功能,如果有帮助,我收到消息
error: incompatible types when assigning to type 'int[50]' from type 'int'.
早些时候,我收到了消息
error: called object 'new_scores' is not a function,
所以报错信息变长了,情况也没有好转。最重要的是,我一直收到消息
的警告
warning: function returns address of local variable [enabled by default],
所以即使我让错误消失了,当真正 运行 代码出现时,程序可能会以不同的方式搞砸。最好的情况是代码成功编译,但无法访问函数 returns。
免责声明:由于无法解释的原因,不得使用 malloc、memcpy 和任何与动态内存分配相关的工具来修复问题。如果免责声明成为难以处理的负担,我将尝试弄清楚这些原因是什么。
此错误信息:
error: incompatible types when assigning to type 'int[50]' from type 'int'.
告诉我们adjusted_scores
是一个数组,不能直接给数组赋值。
这个警告:
warning: function returns address of local variable [enabled by default],
发生是因为函数 new_scores
中的变量 new_scores
是一个数组,并且在大多数情况下,数组会衰减为指向其第一个元素的指针,这意味着您要返回的地址局部变量。这很糟糕,因为当函数退出导致指针无效时,该变量超出范围。
解决这两个问题的方法是将 adjusted_scores
传递给函数并将更新后的值直接分配给它。
此外,sizeof(scores)/sizeof(scores[0])
不会如您所愿,因为 scores
是指针,而不是数组,所以 sizeof(scores)
是指针的大小。
所以 new_scores
看起来像这样:
void new_scores(int result[], int scores[], int size, int days_late[], int penalty) {
int i;
for(i=0;i<size;i++){
result[i]=scores[i]-penalty*days_late[i];
}
}
你会这样称呼它:
new_scores(adjusted_scores,scores,sizeof(scores)/sizeof(scores[0]),days_late,penalty);
因为这是一条常见的错误消息,所以我用 Google 搜索了这个问题。不幸的是,我所能找到的都是线程,其中问题是由具有相同名称的全局变量和局部变量引起的。我的问题与全局变量无关,所以我认为这是一个新问题。 C 不让我调用函数。每次我调用这样的函数时
...
adjusted_scores = *new_scores(scores,days_late,penalty);
numeric_score = final_score(adjusted_scores, weights);
...
,支持代码
int * new_scores(int scores[], int days_late[], int penalty) {
int new_scores[MAX_ASSIGNMENTS];
/*computes size of array*/
int size = sizeof(scores)/sizeof(scores[0]);
int i;
for(i=0;i<size;i++){
new_scores[i]=scores[i]-penalty*days_late[i];
}
return new_scores;
}
对于有问题的功能,如果有帮助,我收到消息
error: incompatible types when assigning to type 'int[50]' from type 'int'.
早些时候,我收到了消息
error: called object 'new_scores' is not a function,
所以报错信息变长了,情况也没有好转。最重要的是,我一直收到消息
的警告warning: function returns address of local variable [enabled by default],
所以即使我让错误消失了,当真正 运行 代码出现时,程序可能会以不同的方式搞砸。最好的情况是代码成功编译,但无法访问函数 returns。
免责声明:由于无法解释的原因,不得使用 malloc、memcpy 和任何与动态内存分配相关的工具来修复问题。如果免责声明成为难以处理的负担,我将尝试弄清楚这些原因是什么。
此错误信息:
error: incompatible types when assigning to type 'int[50]' from type 'int'.
告诉我们adjusted_scores
是一个数组,不能直接给数组赋值。
这个警告:
warning: function returns address of local variable [enabled by default],
发生是因为函数 new_scores
中的变量 new_scores
是一个数组,并且在大多数情况下,数组会衰减为指向其第一个元素的指针,这意味着您要返回的地址局部变量。这很糟糕,因为当函数退出导致指针无效时,该变量超出范围。
解决这两个问题的方法是将 adjusted_scores
传递给函数并将更新后的值直接分配给它。
此外,sizeof(scores)/sizeof(scores[0])
不会如您所愿,因为 scores
是指针,而不是数组,所以 sizeof(scores)
是指针的大小。
所以 new_scores
看起来像这样:
void new_scores(int result[], int scores[], int size, int days_late[], int penalty) {
int i;
for(i=0;i<size;i++){
result[i]=scores[i]-penalty*days_late[i];
}
}
你会这样称呼它:
new_scores(adjusted_scores,scores,sizeof(scores)/sizeof(scores[0]),days_late,penalty);