Hallöchen,
arbeite mich gerade in C++ ein und habe da Probleme mit dem überladen des
<<-Operators für std::cout
Hier Auszüge aus dem Quellcode:
"ratio.h"
8< schnipp
// Ausgabe einer rationalen Zahl
std::ostream& operator<<(std::ostream&, const rational&);
8< schapp
"ratio.cpp"
8< schnipp
std::ostream& operator<<(std::ostream& out, const rational& r) {
out << r.zaehler << '/' << r.nenner;
return out;
}
8< schnapp
"main.cpp"
8< schnipp
// Funktion zum einfachen Testen inkl Ausgabe
void druckeTestfall(const rational &a, const rational &b) {
rational erg; // Ergebnis
std::cout << "\na = " << a;
std::cout << "\nb = " << b << std::endl;
erg += a;
std::cout << "+ = " << erg << std::endl;
erg = a + b;
}
int main() {
rational a,b;
std::cout << " Test der Eingabe\n";
std::cout << "Rationale Zahl a eingeben\n";
std::cin >> a;
std::cout << "Rationale Zahl b eingeben\n";
std::cin >> b;
druckeTestfall(a,b);
}
8< schnapp
Nun erhalte ich beim Compilieren folgende Meldung:
paumit@dg4:~/Documents/cppbuch/k09/ratio>g++ -Wall -o main main.cpp
/tmp/ccbthCqf.o(.text+0x32): In function `druckeTestfall(rational const&,
rational const&)':
: undefined reference to `operator<<(std::basic_ostream
Ist es moeglich, dass du lediglich vergisst "ratio.cpp" mit einzubinden? So wie ich das sehe muesste der Compileraufruf folgendermassen lauten: g++ -Wall -o main main.cpp ratio.cpp Gruesse Matthias
Ja, das war's! :-) Danke Am Donnerstag, 29. April 2004 23:24 schrieb Matthias Guede:
Ist es moeglich, dass du lediglich vergisst "ratio.cpp" mit einzubinden?
So wie ich das sehe muesste der Compileraufruf folgendermassen lauten: g++ -Wall -o main main.cpp ratio.cpp
Gruesse Matthias
-- paul.mitterberger@gmx.net
Hallo, es liegt wohl daran, dass ein ostream-Object keine 'char's in deinem Fall '/' ist ja ein Char und kein char-pointer. versuche es als ein char-pointer zu definieren, dann sollte es gahen. viel Glück Mohammad Am Donnerstag, 29. April 2004 23:22 schrieb Paul Mitterberger:
Hallöchen,
arbeite mich gerade in C++ ein und habe da Probleme mit dem überladen des <<-Operators für std::cout Hier Auszüge aus dem Quellcode:
"ratio.h" 8< schnipp // Ausgabe einer rationalen Zahl std::ostream& operator<<(std::ostream&, const rational&); 8< schapp
"ratio.cpp" 8< schnipp std::ostream& operator<<(std::ostream& out, const rational& r) { out << r.zaehler << '/' << r.nenner; return out; } 8< schnapp
"main.cpp" 8< schnipp // Funktion zum einfachen Testen inkl Ausgabe void druckeTestfall(const rational &a, const rational &b) { rational erg; // Ergebnis std::cout << "\na = " << a; std::cout << "\nb = " << b << std::endl; erg += a; std::cout << "+ = " << erg << std::endl; erg = a + b; }
int main() { rational a,b; std::cout << " Test der Eingabe\n"; std::cout << "Rationale Zahl a eingeben\n"; std::cin >> a; std::cout << "Rationale Zahl b eingeben\n"; std::cin >> b; druckeTestfall(a,b); } 8< schnapp
Nun erhalte ich beim Compilieren folgende Meldung: paumit@dg4:~/Documents/cppbuch/k09/ratio>g++ -Wall -o main main.cpp /tmp/ccbthCqf.o(.text+0x32): In function `druckeTestfall(rational const&,
rational const&)': : undefined reference to `operator<<(std::basic_ostream
std::char_traits<char> >&, rational const&)' /tmp/ccbthCqf.o(.text+0x5e): In function `druckeTestfall(rational const&,
rational const&)': : undefined reference to `operator<<(std::basic_ostream
std::char_traits<char> >&, rational const&)' /tmp/ccbthCqf.o(.text+0x79): In function `druckeTestfall(rational const&,
rational const&)': : undefined reference to `rational::operator+=(rational const&)'
/tmp/ccbthCqf.o(.text+0xa6): In function `druckeTestfall(rational const&,
rational const&)': : undefined reference to `operator<<(std::basic_ostream
std::char_traits<char> >&, rational const&)' /tmp/ccbthCqf.o(.text+0xc4): In function `druckeTestfall(rational const&,
rational const&)': : undefined reference to `operator+(rational const&, rational const&)'
/tmp/ccbthCqf.o(.text+0x1b5): In function `main': : undefined reference to `operator>>(std::basic_istream
std::char_traits<char> >&, rational&)'
/tmp/ccbthCqf.o(.text+0x1de): In function `main': : undefined reference to `operator>>(std::basic_istream
std::char_traits<char> >&, rational&)' collect2: ld returned 1 exit status paumit@dg4:~/Documents/cppbuch/k09/ratio>
Wo ensteht der Fehler, den ich übrigens ebenfalls erhalte, wenn ich die Lösung compiliere. :-(
Ich verwende gcc-Version 3.3.1 (SuSE Linux ). SuSE 9.0
Grüße und noch einen schönen Abend
Paul -- paul.mitterberger@gmx.net
participants (3)
-
Matthias Guede
-
Mohammad Gharbalchi
-
Paul Mitterberger