我已经编写了一个由 main 调用的函数。在函数中,我有一个嵌套函数。我编译使用:
gcc -o numericalIntegration numericalIntegration.c TrapezoidRule.c SimpsonsRule. GaussQuad.c -fnested-functions
这是我的梯形规则:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define pi 3.1415927
//Note: This program was taken from the first practical and adjusted for sin instead of tan(x) and the limits of integration changed to o --> pi/3
double degtorad(double);
float TrapezoidRule(int args) {
int i, j; //Loop index, Counter, Array dimension
float area, rad, Sin[args], coeff; //Return value of the function, Result array, Area, Coefficient
//TODO: Get table of sin as in Ex. 3
j=0;
for (i=0; i<=180; i=i+5) {
rad = degtorad(i);
Sin[j] = sin(rad);
j=j+1;
}
area = Sin[0];
for (i = 1; i < args - 1; i++) {
area = area + 2.0*Sin[i];
}
//Calculating the area using the trapezoid rule and comparing to the real area
coeff = degtorad(2.5);
// area = (area + Sin[dim - 1]) * coeff;
//Function to convert degrees to radians
double degtorad(double arg) {
return( (pi * arg)/180.0 );
}
area = (area + Sin[args - 1]) * coeff;
return area;
}
我收到的错误是:
Undefined symbols:
"_degtorad", referenced from:
_TrapezoidRule in ccdjbt6m.o
_TrapezoidRule in ccdjbt6m.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
我是否错误地执行了嵌套函数?
最佳答案
- 删除
TrapezoidRule()
定义之前的degtorad()
声明。 - 将
degtorad()
的定义移至TrapezoidRule()
的开头,或者至少在调用它之前。
如果你想先声明一个嵌套函数,并将其定义放在其包含函数的末尾,你可以这样做:
float TrapezoidRule(int args) {
auto double degtorad(double);
coeff = degtorad(2.5);
double degtorad(double) {
/* .... */
}
}
参见6.4 Nested Functions了解更多详情。
关于c - 在 C 中使用嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999651/