我在声明函数 "declaration is incompatible with" 和 "different basic types" 时遇到了一个小问题

I've a small problem with the declaration of a function "declaration is incompatible with", and "different basic types"

我正在写一个 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 return 在 checking_the_delta > 0 尽管函数 return 类型不是 void.[=21= 的情况下什么都没有]

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); 

其次,在 header 的函数声明中,您忘记了在函数定义

中指定 return 类型 double
extern soluzioni(double a, double b, double c, double* x1, double* 
x2); 

注意函数实际上return是一个整数而不是双精度值。所以也许你需要指定 return 类型 int.

extern solutions(double a, double b, double c, double* x1, double* x2); 无法指定 solutions 的 return 类型。通常,由于与 C.

的历史相关的原因,它会默认为 int

那么这个和double solutions (double a, double b, double c, double* x1, double* x2)是不兼容的,因为后者声明return类型是double.

修复声明,使它们在两个地方都声明相同的 return 类型:您可以在 header 声明中的 extern 之后插入 double。但是,看起来该函数的目的是 return 不同解决方案的数量。在这种情况下,您可能希望在两个地方都将 return 类型设为 int,并在处理两个解决方案的代码中插入 return 2;