Template Argument kann nicht hergeleitet werden
-
#include "stdafx.h" using namespace std; template <class T1> int newton(T1 &x, T1 (&f)(T1), T1 (&fdiv)(T1), int max_loop, const double accuracy) { T1 term; do { term = (f)(x) / (fdiv)(x); x = x - term; } while ((abs(term / x) > accuracy) && (--max_loop)); return max_loop; }double cfunc, cfdiv; cfunc = Convert::ToDouble(func); cfdiv = Convert::ToDouble(fdiv); double x = -10.0; if (newton(x, cfunc, cfdiv, 10000000000, 1.0e-8)) lbErgebnisNull->Text = Convert::ToString(x);Fehler:
error C2784: "int newton(T1 &,T1 (__clrcall &)(T1),T1 (__clrcall &)(T1),int,const double)": template-Argument für "T1 (__clrcall &)(T1)" konnte nicht von "double" hergeleitet werden.
-
int newton(T1 &x, T1 (&f)(T1), T1 (&fdiv)(T1), //<-- Funktionszeiger?
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Gate schrieb:
int newton(T1 &x, T1 (&f)(T1), T1 (&fdiv)(T1), //<-- Funktionszeiger?-->
namespace Convert { double ToDouble(double x) { return x; } } int main() { double d = -10.0; int n = newton(d, Convert::ToDouble, Convert::ToDouble, 10000000, 1e-8); return 0; }
-
Vermutlich weil Convert::ToDouble zig mal überladen ist und der Compiler nicht wissen kann, dass Du die Methode mit dem Double-Parameter meinst.
EDIT: Darüberhinaus gibt es in C++ keine Referenzen auf Funktionen, höchstens [opt: Referenzen auf] Funktionszeiger. Also T1 (*fn)(T1) und &Convert::ToDouble.
Du vermischt hier C++ und C++/CLI Code... Absicht?