【问题标题】:Conflicting type C冲突类型 C
【发布时间】:2016-03-01 14:26:54
【问题描述】:

我遇到了一些我不理解的冲突类型的问题。我想更改之前设置的日期,但是这让我很头疼。

int main(){
float any=11;
llegirany(&any);
printf("%f",any);
getch();    
}

void llegirany(float * any){    
float auxi; 
auxi=llegirinterval(1,31);  
*any= auxi;
}

float llegirinterval(float n1,float n2){
float aux;
       do{          
            scanf("%f",&aux);
        }while(aux>n2 || aux<n1);
return aux;
}

我得到这个输出错误:

65 7 D:\DAM\PRo\pruebaconio.c [错误] 冲突类型 'llegirinterval' 62 7 D:\DAM\PRo\pruebaconio.c [注意] 上一个 'llegirinterval' 的隐式声明在这里

有人可以帮帮我吗?

【问题讨论】:

标签: c types


【解决方案1】:

您在声明之前使用了函数llegirinterval

您应该将llegirinterval定义 移到llegirany定义 之前,或者至少在使用之前声明 llegirinterval .

查看difference between definition and declaration

在@Olaf 评论后编辑。

【讨论】:

  • 确实,没有函数原型,也没有#include 文件。
  • 定义之前使用一个函数是可以的。但是你需要它的声明
【解决方案2】:

尝试在使用前向函数llegirinterval() 添加声明。您还应该声明代码中包含的其他函数:

void llegirany(float *any);
float llegirinterval(float n1,float n2);

int main(){
    float any=11;

...

void llegirany(float * any){
    float auxi;
    auxi=llegirinterval(1,31);
    *any= auxi;
}

默认情况下,C 将任何尚未明确键入的变量名称的类型视为 int。所以,当它看到调用:

llegirany(&any);

在 main 的第三行,编译器说“啊哈,一个名为 llegirany 的函数,它返回一个 int

后来,当编译器得到函数的实际函数定义时,它会感到困惑——等等,我以为 llegirany 返回一个 int,现在你告诉我它返回一个 float

【讨论】:

  • 您应该在main() 之前添加both 函数原型,因为main() 调用一个调用另一个。在源代码中,每一个都在调用它的下面。
  • @Weather Vane -- 正确。
猜你喜欢
  • 2014-03-10
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多