Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Typ T in Template als vektor...

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
27.03.2008, 15:03 Uhr
jeykey



Hallo mal wieder, ich habe ein Problem: Ich habe eine template-Klasse in einer seperaten Datei, wie kann ich jetzt als Typ T nicht int oder char oder so benutzen, sondern z.B einen Vektor. Bei mir geht das net...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.03.2008, 16:24 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst ist das keine Template-Klasse, sondern eine Klassen-Template. Bzw. Klassenvorlage. Das hat zwei Dinge zur Folge:

1. Eine Template selbst ist keine Klasse, und dementsprechend kein Typ, erst ihre Spezialisierung ist es, und
2. Der Compiler muss den kompletten Code der Template zur Compilezeit kennen, um sie spezialisieren zu können.

Also,

C++:
std::vector<std::vector> v; // nicht möglich, std::vector ist kein Typ
std::vector<std::vector<int> > v; // möglich, std::vector<int> ist ein Typ


Und zweitens muss deine Klassenvorlage vollständig in den Header und per #include in die benutzende Übersetzungseinheit eingebunden werden.

Im Übrigen wäre eine genauere Fehlerbeschreibung hilfreich.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.03.2008 um 16:25 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.03.2008, 18:00 Uhr
jeykey



Okay das war vielleicht en bissel wenig, sorry. Im Grunde genommen ist das auch nicht wirklich ein Problem, sondern [header-datei]:
Code:
#include <iostream>
template <class T>
class Spieler
{
    private:
        int m_type; // Computer oder Mensch?
        T lKarten; // immer dran denken: Ein Minenleger soll es sein!
    public:
        Spieler ();
};


template <class T>
Spieler<T>::Spieler ()
{
    cout << "Computer oder Mensch?: ";
    cin >> m_type;
}


Es wird weder registriet das die iostream-Datei eingebunden wurde, noch das wenn ich mit #include <vector> die Vektor Datei einbinde... Es kommt immer die selbe Fehlermeldung cin not find ... cout not find... usw.

Mit der "Klassenvorlage" versuchte ich nur mein Problem zu umschiffen, denn dann bräuchte ich vector gar nicht in der Headerdatei einzubinden, sonder könnte gleich von einer cpp-Datei darauf zugreifen.

Hoffe ihr könnt mir helfen,
Gruß pl

Dieser Post wurde am 27.03.2008 um 18:01 Uhr von jeykey editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.03.2008, 18:17 Uhr
0xdeadbeef
Gott
(Operator)


Das liegt daran, dass die Symbole der Standardbibliothek im Namensraum std liegen. Also

C++:
template <class T>
Spieler<T>::Spieler ()
{
    std::cout << "Computer oder Mensch?: ";
    std::cin >> m_type;
}


...und analog std::vector etc.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.03.2008, 22:48 Uhr
jeykey



ah cool, danke, endlich hab mich schon ewig damit rumgeärgert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: