gpt4 book ai didi

iphone - '' 的错误冲突类型是什么意思?

转载 作者:行者123 更新时间:2023-12-03 19:28:31 29 4
gpt4 key购买 nike

我收到一条错误消息“错误:‘____’的类型冲突。这是什么意思?

最佳答案

Quickfix:

Make sure that your functions are declared once and only once before they are called. For example, change:

main(){ myfun(3.4); }
double myfun(double x){ return x; }

To:

double myfun(double x){ return x; }
main(){ myfun(3.4); }

Or add a separate function declaration:

double myfun(double x);
main(){ myfun(3.4); }
double myfun(double x){ return x; }

错误的可能原因

  1. 函数在声明之前被调用
  2. 定义的函数会覆盖包含 header 中声明的函数。
  3. 函数在同一文件中定义了两次
  4. 声明和定义不匹配
  5. 包含的 header 中存在声明冲突

到底发生了什么

error: conflicting types for ‘foo’意味着一个函数被多次定义为不同的类型签名。

包含两个名称相同但返回类型不同的函数的文件将引发此错误,例如:

int foo(){return 1;}
double foo(){return 1.0;}

事实上,当使用 GCC 编译时,我们会遇到以下错误:

foo.c:5:8: error: conflicting types for ‘foo’
double foo(){return 1.0;}
^
foo.c:4:5: note: previous definition of ‘foo’ was here
int foo(){return 1;}
^

现在,如果我们有一个包含两个同名函数定义的文件

double foo(){return 1;}
double foo(){return 1.0;}

我们会收到“重新定义”错误:

foo.c:5:8: error: redefinition of ‘foo’
double foo(){return 1.0;}
^
foo.c:4:8: note: previous definition of ‘foo’ was here
double foo(){return 1;}
^

隐式函数声明

那么为什么下面的代码会抛出 error: conflicting types for ‘foo’

 main(){ foo(); }
double foo(){ return 1.0; }

原因是隐式函数声明

当编译器第一次遇到foo()时在 main函数,它将假定函数 foo 的类型签名的int foo() 。默认情况下,假定隐式函数返回整数,并且输入参数类型派生自您传递给函数的内容(在本例中,没有任何内容)。

显然,编译器做出这个假设是错误的,但是 C(以及 Objective-C)语言的规范是旧的、古怪的,而且不是很聪明。也许隐式声明函数可以通过降低编译器的复杂性来节省一些开发时间,但现在我们却陷入了一个本来不应该出现在语言中的可怕功能。事实上,隐式声明在 C99 中是非法的。

也就是说,一旦您知道发生了什么,就应该很容易找出问题的根本原因。

关于iphone - '' 的错误冲突类型是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161012/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com