【问题标题】:I've a small problem with the declaration of a function "declaration is incompatible with", and "different basic types"我对函数“声明不兼容”和“不同的基本类型”的声明有一个小问题
【发布时间】:2021-12-15 13:09:02
【问题描述】:

我正在编写一个 C 程序。这个 C 程序必须计算二次方程的解。问题是调试器向我显示了这种错误:“E0147”和“C22371”。 这是我的程序:

delta.c:

    #include "delta.h"
    #include "math.h"

    double delta(double a, double b, double c) {
    double delta = 0; 
    double power = pow(b, b); 
    delta = power - (4 * a * c); 
    return delta; 
} 

delta.h:

#if !defined DELTA_H
#define DELTA_H  

extern double delta(double a, double b, double c); 

#endif /* DELTA_H */

solutions.c:

#include "delta.h"
#include "solutions.h" 
#include "math.h"

double solutions (double a, double b, double c, double* x1, double* x2) {
double checking_the_delta = 0; 
checking_the_delta = delta(a, b, c); 
if (checking_the_delta == 0) {
    return 1; 
}
else if (checking_the_delta >= 0) {
    double tmp = delta(a, b, c);
    double square_root = sqrt(tmp);
    *x1 = (-b + square_root) / 2;
    *x2 = (-b - square_root) / 2;
}
else 
    return 0; 
}

solutions.h:

#if !defined SOLUTIONS_H 

#define SOLUTIONS_H

extern solutions(double a, double b, double c, double* x1, double* 
x2); 

#endif /* SOLUTIONS_H */

最后是 main.c:

#include "solutions.h" 
#include "delta.h" 

int main(void) {
solutions(...); 
return 0; 
}

问题出在这一行:“双重解决方案(双a,双b,双c,双* x1,双* x2)”。调试器说这个声明与头文件中的声明不兼容。此外,它说“解决方案重新定义:不同的基本类型”。

我完全迷失了,我再次编写了声明,但调试器不断向我显示这两个错误。

【问题讨论】:

  • 你能发布solutions.h文件吗?
  • 啊,我忘记了。谢谢。给我1秒

标签: c compiler-errors return-type function-declaration


【解决方案1】:

extern solutions(double a, double b, double c, double* x1, double* x2); 未能指定solutions 的返回类型。通常,由于与 C 的历史相关的原因,它将默认为 int

那么这与double solutions (double a, double b, double c, double* x1, double* x2)不兼容,因为后者声明返回类型为double

修复声明,使它们在两个位置声明相同的返回类型:您可以在标头声明中的 extern 之后插入 double。但是,该函数似乎旨在返回不同解决方案的数量。在这种情况下,您可能希望在两个位置都设置返回类型 int,并在处理两个解决方案的代码中插入 return 2;

【讨论】:

    【解决方案2】:

    对于初学者来说,函数solutionschecking_the_delta > 0 的情况下不返回任何内容,尽管函数返回类型不是void

    double solutions (double a, double b, double c, double* x1, double* x2) {
    double checking_the_delta = 0; 
    checking_the_delta = delta(a, b, c); 
    if (checking_the_delta == 0) {
        return 1; 
    }
    else if (checking_the_delta >= 0) {
        double tmp = delta(a, b, c);
        double square_root = sqrt(tmp);
        *x1 = (-b + square_root) / 2;
        *x2 = (-b - square_root) / 2;
    }
    else 
        return 0; 
    }
    

    还有这个声明

    double tmp = delta(a, b, c);
    

    是多余的,因为变量checking_the_delta已经包含了函数调用delta(a, b, c)的结果

    checking_the_delta = delta(a, b, c); 
    

    其次,在函数声明的头文件中,您忘记在函数定义中指定返回类型double

    extern soluzioni(double a, double b, double c, double* x1, double* 
    x2); 
    

    请注意,该函数实际上返回的是整数而不是双精度值。所以也许你需要指定返回类型int

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2013-05-02
      • 1970-01-01
      • 2016-01-11
      • 2012-03-13
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多