Funktionstemplate Fehlermeldung



  • Hallo Ihr !

    bin neu hier und sag mal rundherum servus!

    Bin gerade am template erzeugen und bekomm folgenden Aufschrei:
    \main.cpp(8): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    #include <iostream>

    using namespace std;

    template <class T> TMax(T x,T y)
    {
    return x > y? x : y;
    }

    int main()
    {
    int a = 47, b = 12;
    cout << TMax(a,b) << endl;
    double c = 1.23, d = 3.45;
    cout << TMax(c,d) << endl;
    char e = 'a', f = 'b';
    cout << TMax(e,f) << endl;

    cin.get();

    return 0;
    }

    Kann mir wer erklaeren was ich hier verbockt hab?



  • Du hast den Rückgabetyp vergessen.
    PS: Fehlermeldungen lassen sich auch ergooglen.



  • Rückgabetyp beim template? Dachte das waere so die korrekte Syntax, versteh ich grade nicht 😕



  • Du musst wie bei normalen Funktionen auch, den Ruckgabetypen angeben.



  • Oder es fehlt ein Leerzeichen zwischen T und Max


  • Mod

    patrick246 schrieb:

    Oder es fehlt ein Leerzeichen zwischen T und Max

    Warum ruft er die Funktion dann mit dem Namen TMax auf?



  • Danke erstmal fuer die Antworten!
    Verstehs net ganz: ich habe int, double und char und wills mit einer Funktion lösen, d.h. ich leg das template auf alle drei Funktionen und (sollte 🙂 )bekomme korrekte Ergebnisse.
    Je nach Datentyp wird das richtige Ergebnis berechnet, wo soll ich da nen Rückgabewert einsetzen 😞



  • Also es gibt die korrekten Ergebnisse aus mit :

    template <class T> T TMax(T x,T y)

    versteh ich das richtig, dass dann (in meinem Fall) T als "flexibler" Datentyp gesehen wird?


  • Mod

    DasWollvieh schrieb:

    versteh ich das richtig, dass dann (in meinem Fall) T als "flexibler" Datentyp gesehen wird?

    Korrekt. Template heißt so viel wie Schablone. Du schreibst das Grundgerüst, und wenn das Template instanziert wird, wird an Stelle der Templateparameter der jeweils instanzierte Datentyp* eingesetzt und somit aus dem Grundgerüst eine fertige Funktion/Klasse gemacht. Und in diesem Fall hier gehört zu einer Funktion selbstverständlich auch eine Angabe des Rückgabetyps, der aber natürlich auch ein Templateparameter sein darf.

    *: Oder die entsprechende Zahl. Es gibt schließlich auch Zahlen als Templateparameter.



  • Ah Ok !

    Mühsam ernährt sich das Eichhörnchen ... 😃
    Danke für die Erklärung!


Anmelden zum Antworten