Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Funktionstemplate

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.08.2021, 21:51 Uhr
CplusplusRalf



Hallo Leute,

ich habe ein einfaches Template, welches mir den Maximalwert von 2 Zahlen angibt programmiert und rufe diese in der Main auf. Wenn ich das entsprechende Template vor der Main-programmiere, funtioniert das auch soweit...steht die Funktion die Funktion hingegen in der ausgelagerten CPP inklusive ihres Funktionsprototypen in der Header wird mir jedes mal die Fehlermeldung:

error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""float __cdecl maxvalue<float>(float,float)" (??$maxvalue@M@@YAMMM@Z)" in Funktion "_main".
1>CUsers\Nutzer\source\repos\ConsoleApplication2\Debug\ConsoleApplication2.exe : fatal error LNK1120: 1 nicht aufgelöste Externe

angezeigt. Wenn ich das Template in den Namespace packe erscheint die selbe Fehlermeldung. Womit hängt das zusammen?

code


C++:
Library.h:
template <class T> T maxvalue(T, T);

namespace functions
{
    //template <class T> T maxvalue(T, T);
    int funktion1(int);    
}



Library.cpp:

C++:
#include <iostream>
#include <string.h>
#include "Library.h"

const int konstante = 2;
int laufvariable;

template <class T> T maxvalue(T Zahl1, T Zahl2)
{
    if (Zahl1 > Zahl2)
        return Zahl1;
    else
        return Zahl2;
}

namespace functions
{
    int funktion1(int multiplikator)
    {    
        int ergebnis = multiplikator * konstante;
        return ergebnis;
    }
}



ConsoleApplication2.cpp:

C++:
#include <iostream>
#include <string>
#include <climits>
#include "Library.h"

int main()
{
    float max = maxvalue(3.3f, 4.4f);
    std::cout << "Der Maximalwert beträgt " << max << std::endl;    
}


Dieser Post wurde am 12.08.2021 um 15:39 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.08.2021, 15:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
das liegt daran, das er um ein template zu benutzen, das komplette template kennen muss, d.h alles was mit dem template zu tun hat, muss bei benutzung verfügbar sein.

In deinem Beispiel heißt das, das


C++:
template <class T> T maxvalue(T Zahl1, T Zahl2)
{
    if (Zahl1 > Zahl2)
        return Zahl1;
    else
        return Zahl2;
}



in den header muss.

Ansonsten: std::max existiert - vermeide es, "das Rad neuzuerfinden".
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.08.2021, 13:56 Uhr
CplusplusRalf



Habe ich gemacht, sodass in der Library.cpp und Header die komplette Defintion des Templates steht. Dann erscheint jedoch die Fehlermeldung:

1>CUsers\Nutzer\source\repos\ConsoleApplication2\ConsoleApplication2\Library.cpp(11,22): error C2995: "T maxvalue(T,T)": Funktionsvorlage wurde bereits definiert

Auch wenn ich das Template in den Namespace packe bleibt diese bestehen. Was mache ich verkehrt? Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.08.2021, 07:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nein nicht doppelt. nur im header
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: