linux-l: C++ (templates, operator overloading)

Michael Wiedmann michael.wiedmann at detewe.de
Mo Aug 2 13:35:19 CEST 1999


Samy Khadem-Al-Charieh schrieb:

[...]
> monom.cc
> ----------------------------------------
> #include "monom.h"
> template<class t_type>
> void monom<t_type>::print() {
>         cout << m_coeff << "*x^" << m_order << endl;
> }
[...]

Die Defintion der Template-Methoden darf natürlich nicht in einer
CC-Datei
stehen, sondern in der zugehörigen H-Datei, also ungefähr so:

monom.h
----------------------------------------
#include <iostream>

using namespace std;

template<class t_type> class monom {
protected:
        int m_order;
        int m_coeff;
public:
        monom(int o, int c);
        void print(void);   
};

template<class t_type>
monom<t_type>::monom<t_type>(int o, int c)
{ 
 m_order=o; m_coeff=c; 
}

template<class t_type>
void monom<t_type>::print() {
        cout << m_coeff << "*x^" << m_order << endl;
}

Deine "monom.cc" ist also nicht notwendig, beachte aber noch "m_coeff",
dessen Typ in deinem Beispiel falsch war.

Zu deinem Problem mit dem Überladen des "<<"-Operators, kann ich im
Moment nur soviel sagen, als dass (<- neue Rechtschreibung!) du dir im
Stroustrup mal das Kapitel 21.2.3 "Ausgabe selbstdefinierter Datentypen"
genauer ansehen solltest.
Auf den ersten Blick fehlen dir wohl Referenzen auf "ostream".

Gruß
Michael
------------------------------------------------------------------------
  Michael Wiedmann              |  
  Cordless Technology A/S       |  "Keep computers away from windows"
  Köpenicker Str. 180           |  (Garfinkel/Spafford:  
  D-10997 Berlin                |   Practical Unix & Internet Security)
------------------------------------------------------------------------



Mehr Informationen über die Mailingliste linux-l