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

Samy Khadem-Al-Charieh khadem at physik.TU-Berlin.DE
Mo Aug 2 11:44:36 CEST 1999


Hallo Liste,

ich hoffe das ist nicht OT, aber ich programmiere ja schließlich unter
Linux mit egcs und Wipeout (danke für den Tip Michael :-) ).
Folgendes Problem:
Ich habe eine schöne Klasse genannt monom und weiß nicht, wie ich es machen
muß, damit ich in der Header-Datei deklarierte Methoden in der .cc-Datei
definieren kann. Ich schaffe es nur, daß sowohl main.cc als auch monom.cc
ohne Fehlermeldung kompilieren. Will ich dann linken findet der Linker
in main dann nicht die Definition in monom.cc.
Ein weiteres Problem ist, daß ich nicht die Syntax rausfinde, mit der ich
den <<-Operator überladen kann.
Damit das ganze etwas klarer wird, hier Auszüge aus meiner Source:

monom.h
----------------------------------------
#include <iostream>
template<class t_type>
class monom {
protected:
	int m_order;
	t_type m_coeff;
public:
	inline monom(t_monom o, int c) { m_order=o; m_coeff=c; }
	void print();				// funktioniert nur, wenn ich es auch hier definiere
	??? operator<<(???);		// funktioniert gar nicht
};

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

main.cc
----------------------------------------
#include "monom.h"
main() {
	monom<double> m(4., 5);
	m.print();
}

Wie gesagt, lasse ich den operator<<-Kram erstmal raus, kompiliert alles,
aber ich bekomme beim Linken die Fehlermeldung:
	"monom.h:8: undefined reference to 'monom<double>::print(void)`"
Wohlgemerkt ist dies die Zeile des Konstruktors! Nehme ich die m.print();-
Zeile aus main.cc heraus, geht es wieder!?!?

Was sagt mir das???

Hilfe !!!!!     ;-)

Tschüß, Samy.

PS: Ich lese jetzt schon seit mehreren Tagen im Stroustrup, hat mir aber
nichts geholfen - zumindest nicht für dieses Problem ;-)

-- 
  "The human race is so puny compared to the universe        Prof.S.W.Hawking
   that being disabled is not of much cosmic significance."
Samy Khadem-Al-Charieh          >===---===<          khadem at physik.TU-Berlin.DE



Mehr Informationen über die Mailingliste linux-l