Fehlermeldung (falsche Parameter)
-
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
-
ZuK schrieb:
Hab's als c-code ausprobiert ( wg printf ). Ok falsches Forum.
Kstimmt hab ich überlesen
nix für ungut
-
Hier nochmal mein überarbeiteter code :
double stn14o::fun(double *x){ //code } 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 } void stn14o::funktion(){ /*Zeile 99*/nelmin(fun,n, start, xmin, ynewlo, reqmin, step,konvge, icount, kcount, numres, ifault,1.0e-8, 1.0e-8); }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)"
Ersetze ich das "fun" durch "fun(x)" in Zeile 99,
so erscheint die Fehlermeldung :"error: no matching function for call to `stn14o::nelmin(double, 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)"
-
Hallo,
Nochmal die Frage.
Ist double stn14o::fun(double *x) static? Wenn nicht geht das so nicht, da nichtstatische Memberfunktionen implizit this mit übergeben und somit natürlich eine andere Signatur haben. Da gibt es glaube ich in der FAQ zwei Threads dazu.
Entweder du machst die Funktion static, nimmst eine Nichtmemberfunktion oder versuchst dein Problem ohne Funktionspointer zu lösen (Funktor oder so).Ciao
-
@Consideration
funktionspointer != methodenpointerhttp://www.newty.de/fpt/index.html
http://www.cpp-tutor.de/cpp/le09/le09_02.htm
-
Consideration schrieb:
Hier nochmal mein überarbeiteter code :
double stn14o::fun(double *x){ //code } 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 } void stn14o::funktion(){ /*Zeile 99*/nelmin(fun,n, start, xmin, ynewlo, reqmin, step,konvge, icount, kcount, numres, ifault,1.0e-8, 1.0e-8); }ließ meinen funktionsaufruf mal genauer durch
die & zeichen sind keine unnötige dekoration
-
Entweder du machst die Funktion static
Da in der Funktion func Variable des Objekts "stn14o" verändert
werden, bringt static hier nicht viel.nimmst eine Nichtmemberfunktion oder versuchst dein Problem ohne Funktionspointer zu lösen (Funktor oder so)
Wieso eine nichtmemberfunktion nehmen ?
Jedenfalls werden in func Variable des Objekts "stn14o" bearbeitet,
bzw. auf sie zugegriffen, daher muss es sich um eine Memberfunktion handeln.Was ist ein Funktor ?
-
was is das überhaupt fürn schwachsinn mit dem funktionspointer?
die funktion nelmin hat direkten zugriff auf die funktion fun wenn sie sich in derselben klasse befinden... warum also den zeiger auf die funktion übergeben?