Fehlermeldung (falsche Parameter)
-
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
-
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 ?