Fehlermeldung (falsche Parameter)
-
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).
-
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 rausgelassenaber 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
-
poste halt nochmal deinen überarbeiteten code
@zuk ne hat nix damit zu tun und warum bindest du eigentlich stdio.h ein?
-
Sovok schrieb:
@zuk ne hat nix damit zu tun
Ist mir klar dass es auch ohne typedef gehen sollte. Vielleicht spinnt sein compiler.
Sovok schrieb:
und warum bindest du eigentlich stdio.h ein?
Hab's als c-code ausprobiert ( wg printf ). Ok falsches Forum.
K