【问题标题】:I'm getting a "conflicting types" error in C我在 C 中遇到“冲突类型”错误
【发布时间】:2010-09-18 18:09:32
【问题描述】:

我目前正在为 C 课程编写一个程序,在该程序中我必须输出形状的面积。

这是我的程序中用于矩形区域的函数:

double rectangle() // calculate area of rectangle
{
    double length, width;

    printf("\nEnter length and width of rectangle: ");
    scanf("%g %g\n", &length, &width);

    return (length*width);
}

这里是我调用函数rectangle()的地方

if(strncmp(shape, "rectangle", 15) == 0)
    area = rectangle();

我在带有 GCC 编译器的 Linux Mint 中使用 Geany。

我收到的错误是

“geometryv2.c:78:错误:‘矩形’的类型冲突”

我看不出这里有什么冲突。返回类型为 double 的函数返回一个 double。这里的任何帮助将不胜感激。我对 C 还是很陌生,这实际上是我的第一个 C 程序。

谢谢!

【问题讨论】:

  • 你可能在别处用不同的返回类型声明了函数。
  • 不,这是唯一声明函数的地方,我的所有其他函数都在发生这种情况。我有“三角形”“椭圆”“圆形”和“多边形”函数都给出相同的错误。
  • 在 1980 年代中期,在函数的声明(和定义)中使用空参数列表被认为是可以的。自 1989 年以来,最好使用关键字“void”明确表明不接受任何参数。换句话说,编译器接受“double rectangle()”只是为了向后兼容,但所有新代码都应该写成“double rectangle(void)”。

标签: c user-defined-functions


【解决方案1】:

你有没有在函数rectangle()被使用之前声明它?如果不是,则假定返回一个 int。

你需要这样一行:

double rectangle(void);

在调用它之前的某个地方,或者在调用它之前在调用它的同一模块中定义函数。

【讨论】:

  • 好吧,我所有的功能都在 main 之后,是这个问题吗?
  • 在之后定义函数是可以的,但是你需要在调用它们之前声明它们(提供它们的原型——返回类型、名称和参数)。
  • aakbari1024 很有可能。除非您明确声明它们 ([return-type] [function-name]([arguments]);),否则您应该在 main 之前定义它们。
  • @aakbari1024:是的,这就是问题所在。就像 James 展示的那样,在 main 之前添加一个函数声明,问题就解决了。
  • 好的,我在main之前声明了函数。但现在我收到了这个错误:geometryv2.c:(.text+0x2c5): undefined reference to `sqrt' 这在我的“triangle()”函数中。我包括了“math.h”库。发生这种情况的任何原因?
【解决方案2】:

区域变量的数据类型是什么?

还修复了 scanf:

scanf("%lg %lg")

【讨论】:

  • 显然,只有相关的部分,即格式,如果您没有注意到,其他参数也会丢失。 %g 用于浮点数据类型,%lg 用于问题中的双精度数据类型。
猜你喜欢
  • 1970-01-01
  • 2015-05-24
  • 2014-03-10
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多