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?


Anmelden zum Antworten