2013-11-09 4 views
8

У меня проблема. Я использую Visual Studio 2013 и получаю следующую ошибку:ошибка C2371: переопределение «функции»: разные базовые типы

Error C2371: 'getgrundflaeche' redefinition: different basic types. 

Я не знаю, почему я получаю эту ошибку. Я получаю ту же ошибку с VS12, когда пытаюсь вызвать функцию getgrundflaeche().

Вот код:

#include <stdio.h> 
#define PI 3.14159265359 

int main(void){ 
    double h = 0, d = 0, r = 0, G = 0, V = 0, M = 0, O = 0; 

    printf("Geometrie Zylinder:\nBitte geben sie den Durchmesser d ein (cm): "); 
    scanf_s("%lf", &d); 
    printf("Bitte geben sie die Höhe h ein (cm): "); 
    scanf_s("%lf", &h); 
    r = d/2; 

    G = getgrundflaeche(r); 
    /*V = get_volumen(r, h); 
    M = get_mantelflaeche(d, h); 
    O = get_oberflaeche(M, G); */ 

    system("CLS"); 

    printf("Eingaben:\nDurchmesser d: %lf cm\nHöhe h: %lf cm", d, h); 
    system("PAUSE"); 

    return 0; 
} 

double getgrundflaeche(double r){ 
    return (r*r); 
} 
/* 
double get_volumen(double r, double h){ 
return r*r*h*PI; 
} 

double get_mantelflaeche(double d, double h){ 
return d*h*PI; 
} 

double get_oberflaeche(double M, double G){ 
return M+2*G; 
}*/ 
+0

Дубликат [поведение C компилятор со старыми стиле функций без прототипов] (http://stackoverflow.com/questions/2287164/the -behavior-of-ac-compiler-with-old-styled-functions-without-prototypes) –

ответ

16

Вы никогда не объявлял getgrundflaeche перед вызовом. Компилятор предполагает, что необъявленные функции возвращают int. Более позднее определение функции, разумеется, отличается.

решить эту проблему, добавив декларацию до main():

double getgrundflaeche(double r); 

int main(void){ 
+0

Спасибо! Я думал, что это не нужно в C и в приведенных примерах кода, никогда не было объявлена ​​функция. Но главной функцией была последняя функция в файле кода в примерах. – user2974830

+0

Это также решит проблему - декларация функции должна быть видна так или иначе. –

Смежные вопросы