我在声明函数 "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;
。
我正在写一个 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;
。