I have a simple program to run the Romberg algorithm however when I tried to compile it, it keeps returning that
error: conflicting types for 'vector' and
error: conflicting types for 'free_vector'
I really cannot see why this is happening. Would you be able to advice?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "nrutil.h"
#define FUNC(x) ((*func)(x))
#define EPS 1.0e-6
#define JMAX 20
#define JMAXP (JMAX+1)
#define K 5
#define FT_TYPE double
#define FT_OUT "%10.20g"
void nrerror(char error_text[]);
FT_TYPE *vector(long nl, long nh);
void free_vector(FT_TYPE *v, long nl, long nh);
FT_TYPE qromb(FT_TYPE (*func)(FT_TYPE), FT_TYPE a, FT_TYPE b);
FT_TYPE trapzd(FT_TYPE (*func)(FT_TYPE), FT_TYPE a, FT_TYPE b, int n);
void polint(FT_TYPE xa[], FT_TYPE ya[], int n, FT_TYPE x, FT_TYPE *y, FT_TYPE *dy);
FT_TYPE INTEGRAND(FT_TYPE x);
int main(int argc, char *argv[]){
//int n = 10;
//int i;
printf("The first function is F(x) = exp(x)\n");
qromb(INTEGRAND, 0.0, 2.0);
return(0);
}
FT_TYPE INTEGRAND(FT_TYPE x){
return(exp(x));
}
#define NR_END 1
#define FREE_ARG char*
FT_TYPE *vector(long nl, long nh)
/* allocate a FT_TYPE vector with subscript range v[nl..nh] */
{
FT_TYPE *v;
v=(FT_TYPE *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(FT_TYPE)));
if (!v) nrerror("allocation failure in vector()");
return v-nl+NR_END;
}
void free_vector(FT_TYPE *v, long nl, long nh)
/* free a FT_TYPE vector allocated with vector() */
{
free((FREE_ARG) (v+nl-NR_END));
}
void nrerror(char error_text[])
/* Numerical Recipes standard error handler */
{
fprintf(stderr,"Numerical Recipes run-time error...\n");
fprintf(stderr,"%s\n",error_text);
fprintf(stderr,"...now exiting to system...\n");
exit(1);
}
Following by the standard codes of qromb, etc from Numerical Recipes in C.
The program doesn't have problem on other functions but only the FT_TYPE *vector and void free_vector function.
Would you be able to advice why would this happen?