Alex Rivera | Logout

Conflicting types and previous declaration of x was here...what?

Asked 2011-04-01T21:22:46.403
9

I've been teaching myself C for a few months when I have time, and I have run into a problem I am not sure how to fix.

Specifically, when I try to compile this using gcc, I get:

geometry.c:8: error: conflicting types for ‘trapezoid’
geometry.c:7: note: previous declaration of ‘trapezoid’ was here
geometry.c:48: error: conflicting types for ‘trapezoid’
geometry.c:7: note: previous declaration of ‘trapezoid’ was here
geometry.c:119: error: conflicting types for ‘trapezoid_area’
geometry.c:59: note: previous implicit declaration of ‘trapezoid_area’ was here
geometry.c: In function ‘cone_volume’:
geometry.c:128: error: called object ‘3.14100000000000001421085471520200371742248535156e+0’ is not a function
geometry.c: In function ‘cylinder_volume’:
geometry.c:136: error: called object ‘3.14100000000000001421085471520200371742248535156e+0’ is not a function

Now, I think I may need to typecast the functions, but again, I am not sure.

It looks like it wants to read PI, which I had defined as 3.141, as a function. Is there a way I can avoid using the magic number 3.141 (though it's much less of a magic number than others)?

//Geometric formulae
#include <stdio.h>
#include <math.h>

#define PI 3.141

float trapezoid(float b1, float b2, float h);
int trapezoid();
float sphere_volume(float r);
int sphere();
float cone_volume(float r, float h);
int cone();
float pyramid_volume(float b, float h);
int pyramid();
float cylinder_volume(float r, float h);
int cylinder();

int main(void) {
        char selection = 0;

        while(selection != 'q') {
                printf("\t--Geometric Formulas--\n");
                printf("\tSelection an option from the menu: ");
                scanf("%c", & selection);
                switch(selection) {
                        case 1: //Trapezoid area
                                printf("%d", trapezoid());
                                break;
                        c
Edit
Report

1 Answer

8

Any of them that say there was an 'implicit' definition: this can be solved by pre-declaring it. As an example, you pre-declared float trapezoid and int trapezoid, but you didn't pre-declare trapezoid_area. As others pointed out, you also can't overload in C as you can in C++.

In a few areas you're trying to do implicit multiplication -- eg, PI(pow(r,2)) should be PI * (pow(r,2)).

answered 2011-04-01T21:30:26.900

Your Answer