2016-05-13 4 views
-2

Ich versuche ein Modell zu erstellen, das von jemand anderem geschrieben wurde. Wenn die Make-Datei ausgeführt wird, erhalte ich die folgenden Fehler eines des fonctions zu:Widersprüchlicher Typ in C, aber kein klarer Unterschied zwischen Zeilen

ground_layer.c:4391:6: error: conflicting types for 'func_' 
real func_(R_fp funk, real *x) 
    ^
ground_layer.c:4360:17: note: previous declaration is here 
    extern real func_(U_fp, real *); 

Ich fühle mich wie es ein dummer Fehler sein muss, bu mein C ist an dieser Stelle wirklich rostig, und ich kann es einfach nicht Identifizieren Sie den Fehler. Ich habe versucht, alle Unterschiede zu entfernen: Hinzufügen einer x in der ersten Definition, Entfernen der funk, aber diese Änderungen scheinen nur die Dinge noch schlimmer machen.

Für Informationen, bin ich auf MacOSX 10.11. Hier ist der Code von der Definition bis zum Ende:

/* Local variables */ 
    static real a, b; 
    static integer j; 
    static real x; 
    static integer it; 
    static real del, tnm, sum, ddel; 
    extern real func_(U_fp, real *); 

/* ********************************************************************** */ 
    b = exp(-(*aa)); 
    a = 0.f; 
    if (*n == 1) { 
    r__1 = (a + b) * .5f; 
    *s = (b - a) * func_((U_fp)funk, &r__1); 
    it = 1; 
    } else { 
    tnm = (real) it; 
    del = (b - a)/(tnm * 3.f); 
    ddel = del + del; 
    x = a + del * .5f; 
    sum = 0.f; 
    i__1 = it; 
    for (j = 1; j <= i__1; ++j) { 
     sum += func_((U_fp)funk, &x); 
     x += ddel; 
     sum += func_((U_fp)funk, &x); 
     x += del; 
/* L11: */ 
    } 
    *s = (*s + (b - a) * sum/tnm)/3.f; 
    it *= 3; 
    } 
    return 0; 
} /* midexp_ */ 

/* ********************************************************************** */ 
/* ********************************************************************** */ 
real func_(R_fp funk, real *x) 
{ 
    /* System generated locals */ 
    real ret_val, r__1; 

    /* Builtin functions */ 
    double log(doublereal); 

/* ********************************************************************** */ 
    r__1 = -log(*x); 
    ret_val = (*funk)(&r__1)/*x; 
    return ret_val; 
} /* func_ */ 
+0

Schauen Sie sich 'extern real func _ (...)' an. Hast du versucht, diese Zeile zu entfernen? – orbitcowboy

+0

@MartinEttl: wenn Sie sich den ganzen Code anschauen, den ich gepostet habe, wird func_ tatsächlich vor der problematischen Zeile verwendet, also wird das Entfernen der ursprünglichen Deklaration 'extern real func _... 'wahrscheinlich nicht viel nützen, oder? –

+2

Was sind U_fp und R_fp? –

Antwort

5

Die Erklärung hat U_fp aber die Definition hat R_fp.

+0

Ah! Ich wusste, dass es albern war. Irgendwie dachte ich nicht, dass der eigentliche Parameter in der Definition von Bedeutung war, solange der Typ respektiert wurde, aber es sieht so aus, als ob ich falsch lag. Danke für die superschnelle Antwort. –

+0

Da es am Ende eine dumme Frage ist, sollte ich es einfach schließen/entfernen oder gibt es irgendeinen Wert darin, es draußen zu lassen? –

+0

@CynthiaGS Ich denke nicht, dass Sie es löschen können, da es eine uploated Antwort hat. – user3386109

Verwandte Themen