Zum Inhalt springen

Armini

Mitglieder
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

  1. Vielen Dank, cout << a+=b << endl; erzeiugt zwar wieder error: no match for 'operator+=' in 'operator<<(((std::ostream&)(& out.std::basic_ofstream<char, std::char_traits<char> >::<anonymous>)), ((const Matrix&)((const Matrix*)(& a)))) += b' aber geklammert cout << (a+= << endl; geht's.
  2. Hallo Klotzkopp, ersteinmal vielen Dank für die Hilfe und besonders für die weiterführenden Tipps. Es funktioniert jetzt. Zu zwei Dingen habe ich noch eine Frage / Anmerkung using namespace std Stimmt, im Headerfile ist das nicht geschickt, allerdings muss ich dann wenigstens "using std::ostream" angeben weil die Angabe von std::ostream in der Definition selbst wieder eine Fehlermeldung bringt. Initialisierungslisten In dem einfachen Beispiel geht das, aber die eigentliche Klasse besitzt auch ein Array, ist es dann sinnvoll trotzdem die Basistypen in einer Initialisierungsliste anzugeben und nur das Array im Rumpf des Construktirs zu definieren? (Hier soll Platz für eine Matrix reserviert werden die a*b Elemente hat). nochmal cout Wenn ich einen operator += definiere, dann gibt dieser void zurück, ist es prinzipiell auch möglich irgendwie cout << A+=B auszugeben, oder schreibt man das einfach in zwei Zeilen? Viele Grüße Armin //---------- // myclass.h //---------- #ifndef MYCLASS_H #define MYCLASS_H #include <fstream> #include <iostream> using std::ostream; class MyClass { public: MyClass(const MyClass &A); MyClass(int a, int ; ~MyClass(); void swap(MyClass & other); MyClass& operator= (const MyClass &A); const MyClass operator+ (const MyClass &A) const; friend ostream& operator<< (ostream &out, const MyClass &A); private: int a; int b; }; #endif // MYCLASS_H [/code] [code] //---------- // myclass.cpp //---------- #include "myclass.h" using namespace std; //--------------------------------------------------------------------------- MyClass::MyClass(const MyClass &A) { a = A.a; b = A.b; } //--------------------------------------------------------------------------- MyClass::MyClass(int aa, int bb) : a(aa), b(bb) { } //--------------------------------------------------------------------------- MyClass::~MyClass() { } //--------------------------------------------------------------------------- ostream &operator<<(ostream &out, const MyClass &A) { cout << A.a << ", " << A.b << endl; return out; } //--------------------------------------------------------------------------- void MyClass::swap(MyClass & other) { std::swap(a, other.a); std::swap(b, other.; } //--------------------------------------------------------------------------- MyClass& MyClass::operator=(const MyClass &A) { if (this != &A) { MyClass Temp(A); swap(Temp); } return *this; } //--------------------------------------------------------------------------- const MyClass MyClass::operator+(const MyClass& A) const { MyClass R(*this); R.a += A.a; R.b += A.b; return R; }
  3. Hallo, ich habe eine kleine Beispielklasse geschrieben die zwei Integerwerte a und b enthält. Ein überladener Operator + addiert die beiden Werte. Wenn ich eine Instanz mit dem ebenso überladenen operator << einzeln ausgebe, funktioniert das bestens, aber wenn ich einen Ausdruck a+b ausgeben will, gibt es die Meldung "no match for 'operator<<' in 'std::cout << MyClass::operator+(const MyCl.........". Würde mich über einen Tipp zur Lösung freuen. Code liegt bei (Qt Creator mit Gnu c++) Danke und Gruß Armin //-------------------------------------------------------- //myclass.h: //-------------------------------------------------------- #ifndef MYCLASS_H #define MYCLASS_H #include <fstream> #include <iostream> using namespace std; class MyClass { public: MyClass(const MyClass &A); MyClass(int a, int ; ~MyClass(); MyClass& operator= (const MyClass &A); const MyClass operator+ (const MyClass &A) const; friend ostream& operator<< (ostream &out, MyClass &A); private: int a; int b; }; #endif // MYCLASS_H [/code] [code] //-------------------------------------------------------- //myclass.cpp: //-------------------------------------------------------- #include "myclass.h" //--------------------------------------------------------------------------- MyClass::MyClass(const MyClass &A) { a = A.a; b = A.b; } //--------------------------------------------------------------------------- MyClass::MyClass(int aa, int bb) { a = aa; b = bb; } //--------------------------------------------------------------------------- MyClass::~MyClass() { } //--------------------------------------------------------------------------- ostream &operator<<(ostream &out, MyClass &A) { cout << A.a << ", " << A.b << endl; return(out); } //--------------------------------------------------------------------------- MyClass& MyClass::operator=(const MyClass &A) { if (this != &A) { a = A.a; b = A.b; } return(*this); } //--------------------------------------------------------------------------- const MyClass MyClass::operator+(const MyClass& A) const { MyClass R(*this); R.a += A.a; R.b += A.b; return(R); } //-------------------------------------------------------- //main.cpp: //-------------------------------------------------------- #include "myclass.h" int main(int argc, char *argv[]) { MyClass a(3, 3), b(2, 3); cout << a << b; MyClass c = a + b; cout << c; // Als nächstes kommt die "Problemzeile" -> Compiler Fehlermeldung: // main.cpp:11: error: no match for 'operator<<' in 'std::cout << ... // ...MyClass::operator+(const MyClass&) const(((const MyClass&)((const .. // ...MyClass*)(& )))' cout << a + b; // Was ist hier falsch?? return(0); } [/code]

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...