C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problem mit Templateklasse und ueberladen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Robert W. Kuhn
Guest





PostPosted: Mon Feb 07, 2005 2:50 pm    Post subject: Problem mit Templateklasse und ueberladen Reply with quote



Hallo,

ich habe hier eine Templateklasse, wo ich mit einer Funktion, die
ich gerne dann überschreiben möchte, Probleme habe:

template <typename T>
class POINTCTRL {
inline void push_back(T & pt){m_pts.push_back(pt);};

Davon habe ich eine Klasse abgeleitet und die obige Funktion
überladen:

class P2DCTRL : public POINTCTRL<P2D> {
inline void push_back(double x, double y){m_pts.push_back(P2D(x,y));};

Nun verbuxtehudelt mir der Compiler diese Funktion, er erkennt die von der
Basisklasse nicht mehr. Genaue Meldung:
error: no suitable conversion function from "P2D" to "double" exists

Dies geschieht, wenn ich die Funktion der Basisklasse aufrufe. Wo liegt
denn mein Fehler. Wie kann ich dem Compiler einen Tipp geben, welche
Funktion er nehmen soll?

Danke und Tschau - Robert

--
vertrau
voraus voraus

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Kai Ruhnau
Guest





PostPosted: Mon Feb 07, 2005 3:09 pm    Post subject: Re: Problem mit Templateklasse und ueberladen Reply with quote



Robert W. Kuhn wrote:
Quote:
ich habe hier eine Templateklasse, wo ich mit einer Funktion, die
ich gerne dann überschreiben möchte, Probleme habe:

template <typename T
class POINTCTRL {
inline void push_back(T & pt){m_pts.push_back(pt);};

Davon habe ich eine Klasse abgeleitet und die obige Funktion
überladen:

class P2DCTRL : public POINTCTRL inline void push_back(double x, double y){m_pts.push_back(P2D(x,y));};

Du hast die Funktion der Basisklasse verdeckt, nicht überladen. Der
Compiler "sieht" die Funktion aus der Basisklasse nicht mehr (Bei voller
Warnstufe sollte jeder anständige Compiler hier einen Hinweis ausgeben).

Quote:
Nun verbuxtehudelt mir der Compiler diese Funktion, er erkennt die von der
Basisklasse nicht mehr. Genaue Meldung:
error: no suitable conversion function from "P2D" to "double" exists

Dies geschieht, wenn ich die Funktion der Basisklasse aufrufe. Wo liegt
denn mein Fehler. Wie kann ich dem Compiler einen Tipp geben, welche
Funktion er nehmen soll?

Du musst die Funktion in die abgeleitete Klasse hereinholen:

using POINTCTRL<P2D>::push_back;

Eine Nebenbemerkung noch:
Namen, die nur aus Großbuchstaben bestehen sind vereinbarungsgemäß für
den Präprozessor reserviert. Man sollte sie nicht in normalen Code
verwenden.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Robert W. Kuhn
Guest





PostPosted: Tue Feb 08, 2005 6:14 am    Post subject: Re: Problem mit Templateklasse und ueberladen Reply with quote



Kai Ruhnau schrieb:

Quote:
class P2DCTRL : public POINTCTRL<P2D> {
inline void push_back(double x, double y){m_pts.push_back(P2D(x,y));};

Du hast die Funktion der Basisklasse verdeckt, nicht überladen. Der
Compiler "sieht" die Funktion aus der Basisklasse nicht mehr (Bei voller
Warnstufe sollte jeder anständige Compiler hier einen Hinweis ausgeben).
....
Du musst die Funktion in die abgeleitete Klasse hereinholen:

using POINTCTRL<P2D>::push_back;

Klasse, klappt. Mein MS-Compiler kannte das zwar nicht (bzw. brachte immernoch
die alte Fehlermeldung), aber zum Glück haben wir noch den Intel-Compiler. Mit
dem klappt alles.

Quote:
Eine Nebenbemerkung noch:
Namen, die nur aus Großbuchstaben bestehen sind vereinbarungsgemäß für
den Präprozessor reserviert. Man sollte sie nicht in normalen Code
verwenden.

Oh. Schlecht. Finde ich nämlich sehr lesbar. Besser als die MS-Notation,
Klassen mit C anfangen zu lassen. Wenn die in Großbuchstaben sind, sieht
man die schneller und weiß sofort, dass das eine eigene Klasse ist. Fand
ich sehr praktisch.

Steht das wirklich so in der Norm? Ist ja ein Ding.

Tschau - Robert

--
vertrau
voraus voraus

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Tue Feb 08, 2005 10:38 am    Post subject: Re: Problem mit Templateklasse und ueberladen Reply with quote

Robert W. Kuhn wrote:

Quote:
Eine Nebenbemerkung noch:
Namen, die nur aus Großbuchstaben bestehen sind vereinbarungsgemäß für
den Präprozessor reserviert. Man sollte sie nicht in normalen Code
verwenden.

Oh. Schlecht. Finde ich nämlich sehr lesbar. Besser als die MS-Notation,
Klassen mit C anfangen zu lassen. Wenn die in Großbuchstaben sind, sieht
man die schneller und weiß sofort, dass das eine eigene Klasse ist. Fand
ich sehr praktisch.

Steht das wirklich so in der Norm? Ist ja ein Ding.

Nein. Kai schrieb zwar "vereinbarungsgemäß", aber so eine Vereinbarung
gibt's eigentlich nicht. Es ist einfach nur üblich, das so zu machen.
Eine (nicht die einzige) gängige Variante für Klassennamen ist, bei denen
immer den ersten Buchstaben jedes Teilwortes groß zu schreibne, also oben
z.B. PointCtrl.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.