Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fnkt. Templates in Klassen Templates außen auflösen

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 < [ 2 ]
000
02.12.2006, 16:18 Uhr
WindDancer1



Hi Leute ,

ich hab mal ne Frage zu Templates wie der Titel schon verrät ;-).
Ich ein eigenes kleines KlassenTemplate geschrieben(zur Übung weil ich grad c++ lern), in diesem KlassenTemplate hab ich ein FunktionsTemplate deklariert.
KlassenTemplates und FunktionsTemplates für sich alleine funktionieren aber gemixt klappt gar nichts mehr!

Hier mal mein code in der cpp Datei :


C++:
#include <iostream>
#include <string>
#include "Demo.h"
using namespace std;



void main()
{
    Demo<int> Test;
    
    Test.berechne<int>();
    
    
}    



Und dies ist der Code der Demo.h:


C++:
template<class cT> class Demo
{
    public:
        template<class fT> fT berechne();

        cT var1;
        cT var2;
};    



// ****** Auflösen aber wie ******
{
    fT ergebnis = var1 + var2;
    
    cout << ergebnis << endl;
    
    return ergebnis;
    
}    







Ich hab den Code aus dem C / C++ Kompendium abgetippt,
Tippfehler sind keine drin aber es funktioniert trotzdem nich.

Wäre Klasse wenn ihr mir helfen könntet und mir sagen könntet wie ich FunktionsTemplates ausserhalb von KlassenTemplates richtig definiere und in der main richtig aufrufe.

..vorab schon mal vielen Dank für eure Mühe :-)

P.S.: Ich habs schon in einem anderen forum versucht aber das hat nichht so geklappt
WindDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.12.2006, 17:10 Uhr
0xdeadbeef
Gott
(Operator)


Jaa, das ist, zugegeben, etwas verwirrend. Das muss so aussehen:

C++:
template<typename cT> template<typename fT> fT Demo<cT>::berechne()
{
    fT ergebnis = var1 + var2;
    
    std::cout << ergebnis << std::endl;
    
    return ergebnis;
    
}


btw,

C++:
int main() // main gibt _immer_ int zurück. void main ist einfach falsch.


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.12.2006, 17:21 Uhr
WindDancer1



Hi 0xdeadbeef ,

danke für Deine schnelle Antwort.

Ich habe die Fnkt. in Demo.h durch Deine ersetzt und alles andere so gelassen ausser das Void in Main (natürlich hast Du da recht), bekomme aber jetzt 4 Fehler:

error C2059: Syntaxfehler : ''template<''
error C2065: 'Test' : nichtdeklarierter Bezeichner
error C2228: Der linke Teil von '.berechne' muss eine Klasse/Struktur/Union sein
error C2062: 'int'-Typ unerwartet

Ist die Main so richtig wie ich sie gepostet hab ?
Ich hab jetz auch gelesen dass vc 6.0 bei Templates nicht gut ist man sollte mindestens 7.0 verwenden !

best regards

WindDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.12.2006, 18:08 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <iostream>

template<class cT> class Demo
{
    public:
        template<class fT> fT berechne();

        cT var1;
        cT var2;
};    



template<typename cT> template<typename fT> fT Demo<cT>::berechne()
{
    fT ergebnis = var1 + var2;
    
    std::cout << ergebnis << std::endl;
    
    return ergebnis;
    
}

int main()
{
    Demo<int> Test;
    
    Test.berechne<int>();
}    


Auf die Art gehts anstandslos mit gcc 4.1. Der VC++6 ist in der Tat ein ziemlich beschissener Compiler, was zum Teil daran liegt, dass er vor der Standardisierung von C++ geschrieben wurde. Gut möglich, dass der das einfach nicht kann. Vielleicht kannst du dem ja VC++ 2005 unterschieben.

Oder, wenns dir nichts ausmacht, Beta-Software zu benutzen, kannst du mal auf www.codeblocks.org vorbeikucken. Das ist allerdings unter Windows etwas Gefummel - naja, lies halt den Kram auf der download-Seite.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.12.2006, 18:13 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von WindDancer1:
Ich hab jetz auch gelesen dass vc 6.0 bei Templates nicht gut ist man sollte mindestens 7.0 verwenden !



Oh,oh das ist ja mal wieder ne Steilvorlage....
Sicherlich wird dir 0xdeadbeef gleich von den hervorragenden MS Produkten erzählen


Edit:
Ooooh,zu spät....aber ich staune doch nicht schlecht.Offensichtlich ändert sich 0xdeadbeef ´s Standpunkt proportional zu Microsofts liberalerer Geschäftspolitik .
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 02.12.2006 um 18:17 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.12.2006, 18:24 Uhr
WindDancer1



Hey Spacelord,

genausowas hab ich mir aber auch schon gedacht ich sag nur gcnew, __new und so weiter,
ein Compiler kann nicht vollständig ausgereift sein wenn er alle 2 Jahre in einer neuen Version auf demn Markt kommt.
Man kommt sich bei dem VC++ Sprachchaos das bei MS herrscht manchmal vor wie auf dem Turm zu Babel und zwar ganz oben...

sprachlos;-)
WindDancer




Wir gehen, und mit uns die Intelligenz !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.12.2006, 18:34 Uhr
0xdeadbeef
Gott
(Operator)


Ich mag den VC++ nach wie vor nicht, aber seit 7.1 kann der Compiler zumindest den größten Teil von C++ - das macht ihn benutzbar.

Dass VC++6 völlig unbenutzbar ist, darüber müssen wir uns doch hoffentlich nicht streiten, oder?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.12.2006, 18:43 Uhr
WindDancer1



Jo,

ich hab schon mal dran gedacht ins Borland Lager zu wechseln, hab dann aber gehört dass der bei grafikoperationen langsamer als VC sein soll ...

hab aber keinerlei Erfahrung mit Borland...

WindDancer




Wir gehen, und mit uns die Intelligenz !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.12.2006, 18:48 Uhr
Spacelord
Hoffnungsloser Fall


Die aktuelle Version vom VC++ kannst du momentan unter Windows ruhig als "sehr gut" ansehen.
Ich bezweifel dass ein Wechsel ins Borland Lager Vorteile bringen wird.
Es mag sein dass es Compiler gibt die sich im Nachkommastellenbereich "standardkonformer" verhalten(nicht Borland),mit diesen wirst du aber bei weitem nicht so ne Freude an der Anwendungsentwicklung für Windows haben wie mit VC++.

Gruß Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 02.12.2006 um 18:49 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.12.2006, 19:09 Uhr
0xdeadbeef
Gott
(Operator)


...du könntest dir natürlich auch ein Linux-System aufsetzen, dann haste später auch vernünftige Bibliotheken zur Auswahl. (SCNR, Spacelord )

Ne ganz andere Idee, wie wärs mit Eclipse? Zieh dir eclipse und eclipse CDT runter, dann haste die gnu toolchain mit einer guten IDE für lau.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: