Fehlermeldung (falsche Parameter)



  • ... schrieb:

    Geiler Funktionsname (und noch geiler vom Scope) 👍

    Ich finde die Anzahl der Übergabeparameter viel interessanter. 😮



  • Wieso sieht der Compiler die Parameter immer mit Adressen von Datentypen ????

    Wieso immer int& oder double& und nicht einfach int oder double,
    so wie die Funktion halt definiert worden ist ?!?!?!

    Bei den letzten beiden Parametern handelt es sich um Zahlen, bei
    den übrigen um Variable, die zuvor mit Werten zugewiesen wurden.



  • Consideration schrieb:

    Wieso sieht der Compiler die Parameter immer mit Adressen von Datentypen ????

    Das sind Referenzen, keine Adressen.

    Einzelne Fragezeichen tun's auch.



  • Hier noch etwas Code, wenns hilft :

    void stn14o::clear(){
    double g,am1,*start,*step;
    double reqmin = 1.0e-10,*xmin,xminval=0,ynewlo,*x,xval=0;
    int n=3,konvge=5,kcount=2000,ifault=0,icount,numres;
    
    //code
    
    nelmin(f(x), n, start, xmin, ynewlo, reqmin, step,konvge, icount, kcount, numres, ifault,1.0e-8, 1.0e-8);
    
    }
    
    int stn14o::nelmin(double fn(double *x),int n,double *start,double *xmin,double ynewlo,double reqmin,double *step,int konvge,int icount,int kcount,int numres,int ifault,double reltol, double abstol){
    
    //code
    
    }
    
    double stn14o::f(double *x){
    
    //code
    
    }
    


  • Der erste Parameter muss ein Zeiger auf eine Funktion sein, die double* als Parameter hat und double zurückgibt. Das träfe auf stn14o::f nur dann zu, wenn die Methode statisch wäre (ist aus deinem "Codefragment" leider nicht zu erkennen). Passt aber trotzdem nicht, weil du keinen Funktionszeiger übergibst, sondern einen Funktionsaufruf (und damit den Rückgabewert dieses Aufrufs).


  • Mod

    der erste parameter ist falsch. erwartet wird ein funktionszeiger auf eine funktion, die einen zeiger auf double nimmt und ein double zurückgibt. du übergibst nur ein double.

    Wieso immer int& oder double& und nicht einfach int oder double,
    so wie die Funktion halt definiert worden ist ?!?!?!

    der compiler zeigt dir die funktion so an, wie sie definiert wurde, das ist der candidate.
    die zweite funktion (mit den referenzen etc.) ist der funktionstyp, der am besten zu deinen aufrufparametern passt. in dieser form muss die funktion nicht existieren, es ist lediglich ein 'best match'.



  • Wie sollte es dann richtig aussehen ?

    Vorschläge (schriebt ruhig code rein) ?

    VIELEN DANK im Voraus



  • wird nich viel bringen weil du keine ahnung hast was du da machst und wir keine ahnung ham was die funktion macht

    prinzipiell:

    int stn14o::nelmin(
    double fn(double *x),
    int n,
    double *start,
    double *xmin,
    double ynewlo,
    double reqmin,
    double *step,
    int konvge,
    int icount,
    int kcount,
    int numres,
    int ifault,
    double reltol, 
    double abstol);
    
    double func ( double* ) {return 0;}
    int n;
    double start;
    double xmin;
    double ynewlo;
    double reqmin;
    double step;
    int konvge;
    int icount;
    int kcount;
    int numres;
    int ifault;
    double reltol;
    double abstol;
    
    nelmin ( 
    func,
    n,
    &start,
    &xmin,
    ynewlo,
    reqmin,
    &step,
    konvge,
    icount,
    kcount,
    numres,
    ifault,
    reltol, 
    abstol
    );
    


  • Wenn in der func Funktion keine Variable als Parameter steht,
    sondern nur (double*), wie soll dann die übergebene Variable
    in der Funktion bearbeitet werden.

    Es muss doch noch einen Weg geben, mit der die Funktion func so ausseht

    "double func(double *x)"

    ..



  • dann schreib es doch einfach rein.

    double func(double *x) { return 0; }
    


  • miller_m schrieb:

    dann schreib es doch einfach rein.

    double func(double *x) { return 0; }
    

    was dazu führen würde, dass der compiler sagt "unused variable"
    deswegen hab ichs rausgelassen

    aber wie miller richtig sagt... wenn du sie benutzen willst
    schreib sie rein wenn nich lass sie weg



  • Ich hab es nun so gemacht, wie es Sovok vorgeschlagen hat, nur dass ich das x
    als Parameter noch reingeschrieben habe ("unused variable ist ja nur eine Warning, kein ERROR).

    Trotzdem bekomme ich aber folgende Fehlermeldung :

    error: no matching function for call to `stn14o::nelmin(<unknown type>, int&, double*&, double*&, double&, double&, double*&, int&, int&, int&, int&, int&, double, double)

    error: candidates are: int stn14o::nelmin(double ()(double), int, double*, double*, double, double, double*, int, int, int, int, int, double, double)

    Als ersten Parameter hab ich jetzt nur "func" stehen.



  • ich weiß zwar ned was du da machst aber wenn ich untenstehenden code in ne leere cpp kopier und mit visual c++ 6 kompilier werden keine fehler angezeigt

    int nelmin( 
    double fn(double *x), 
    int n, 
    double *start, 
    double *xmin, 
    double ynewlo, 
    double reqmin, 
    double *step, 
    int konvge, 
    int icount, 
    int kcount, 
    int numres, 
    int ifault, 
    double reltol, 
    double abstol){return 0;}
    
    double func ( double* ) {return 0;} 
    int n; 
    double start; 
    double xmin; 
    double ynewlo; 
    double reqmin; 
    double step; 
    int konvge; 
    int icount; 
    int kcount; 
    int numres; 
    int ifault; 
    double reltol; 
    double abstol; 
    
    int main()
    {
    
      nelmin ( 
      func, 
      n, 
      &start, 
      &xmin, 
      ynewlo, 
      reqmin, 
      &step, 
      konvge, 
      icount, 
      kcount, 
      numres, 
      ifault, 
      reltol, 
      abstol 
      ); 
    
      return 0;
    }
    


  • gcc 3.4.2 auch 😉

    [edit]
    da fällt mir auf ich sollte mal wieder updaten



  • Sovok schrieb:

    ich weiß zwar ned was du da machst aber wenn ich untenstehenden code in ne leere cpp kopier und mit visual c++ 6 kompilier werden keine fehler angezeigt

    int nelmin( 
    double fn(double *x), 
    int n, 
    double *start, 
    double *xmin, 
    double ynewlo, 
    double reqmin, 
    double *step, 
    int konvge, 
    int icount, 
    int kcount, 
    int numres, 
    int ifault, 
    double reltol, 
    double abstol){return 0;}
    
    double func ( double* ) {return 0;} 
    int n; 
    double start; 
    double xmin; 
    double ynewlo; 
    double reqmin; 
    double step; 
    int konvge; 
    int icount; 
    int kcount; 
    int numres; 
    int ifault; 
    double reltol; 
    double abstol; 
    
    int main()
    {
      
      nelmin ( 
      func, 
      n, 
      &start, 
      &xmin, 
      ynewlo, 
      reqmin, 
      &step, 
      konvge, 
      icount, 
      kcount, 
      numres, 
      ifault, 
      reltol, 
      abstol 
      ); 
    
      return 0;
    }
    

    Diesmal ist wieder kein x als Parameter angegeben worden.
    Ich wollte jedoch wissen, wie eine Lösung aussieht, wenn als Parameter
    der Funktion func ein x steht , also "double func(doublex)" und nicht
    "double func(double
    )".
    Denn das x wird gebraucht, da die Variable in der Funktion bearbeitet wird.



  • Dann schreib das x doch dort rein. Bei mir compiliert das ohne Probleme.



  • Consideration schrieb:

    Diesmal ist wieder kein x als Parameter angegeben worden.
    Ich wollte jedoch wissen, wie eine Lösung aussieht, wenn als Parameter
    der Funktion func ein x steht , also "double func(doublex)" und nicht
    "double func(double
    )".
    Denn das x wird gebraucht, da die Variable in der Funktion bearbeitet wird.

    der funktionsaufruf sieht (mit oder ohne x) genauso aus tt



  • Consideration schrieb:

    Diesmal ist wieder kein x als Parameter angegeben worden.
    Ich wollte jedoch wissen, wie eine Lösung aussieht, wenn als Parameter
    der Funktion func ein x steht , also "double func(doublex)" und nicht
    "double func(double
    )".
    Denn das x wird gebraucht, da die Variable in der Funktion bearbeitet wird.

    ob x angegeben wird oder nicht sagt nur was drüber aus ob du die variable in der funktion verwenden kannst
    es ändert die funktionalität des codes nicht



  • Ich bekomm jedenfalls ständig eine Fehlermeldung,
    ob ich nun das x drinlassse (siehe Fehlermeldung im eröffnungspost)
    oder kein x reinschreibe (siehe letzten Post mit Fehlermeldung).

    Kann es sein, dass die Ursache ganz wo anders im Code liegen kann ?
    (Ist eigentlich immer die einzige Fehlermeldung des Kompilers)



  • Vielleicht geht's ja mit ner typedef

    include <stdio.h>
    typedef	double (* fn)(double *x);
    
    int nelmin(
            fn fp,
    	int n,
    	double *start,
    	double *xmin,
    	double ynewlo,
    	double reqmin,
    	double *step,
    	int konvge,
    	int icount,
    	int kcount,
    	int numres,
    	int ifault,
    	double reltol,
    	double abstol){ fp(start); }
    
    double func( double* x) { printf("st = %f\n", *x); return 0;}
    
    int mm;
    double st;
    double xmin;
    double ynewlo;
    double reqmin;
    double step;
    int konvge;
    int icount;
    int kcount;
    int numres;
    int ifault;
    double reltol;
    double abstol;
    
    int main() {
            st = 5.1;
    	nelmin (func,
    		mm,
    		&st,
    		&xmin,
    		ynewlo,
    		reqmin,
    		&step,
    		konvge,
    		icount,
    		kcount,
    		numres,
    		ifault,
    		reltol,
    		abstol ); 
    }
    

    Kurt


Anmelden zum Antworten