[c++] klasy operator<<
Ostatnio zmodyfikowano 2015-09-19 23:54
carlosmay Temat założony przez niniejszego użytkownika |
[c++] klasy operator<< » 2015-09-19 14:31:53 plik op_c.h: #pragma once
#include <iostream> using std::ostream; class klasa { float m_a; float m_b; public: klasa(); klasa( const float & a, const float & b ); ~klasa(); klasa operator +( const klasa & ob ) const; klasa operator +( float f ) const; friend klasa operator +( float f, const klasa & ob ); friend ostream & operator <<( ostream & os, const klasa & ob ); };
plik op_c.cpp; #include "op_c.h"
klasa::klasa() : m_a( 0 ) , m_b( 0 ) { }
klasa::klasa( const float & a, const float & b ) : m_a( a ) , m_b( b ) { }
klasa::~klasa() { }
klasa klasa::operator +( const klasa & ob ) const { return klasa( m_a + ob.m_a, m_b + ob.m_b ); }
klasa klasa::operator +( float f ) const { return klasa( m_a + f, m_b + f ); }
klasa operator +( float f, const klasa & ob ) { return klasa( f + ob.m_a, f + ob.m_b ); }
ostream & operator <<( ostream & os, const klasa & ob ) { return os << ob.m_a << ", " << ob.m_b << std::endl; }
plik testujący: #include <tchar.h> #include <conio.h> #include "op_c.h"
int _tmain( int argc, _TCHAR * argv ) { using std::cout; using std::endl; klasa ob1( 1.5, 2.5 ); klasa ob2( 2.5, 5.0 ); klasa total; cout << ob1; cout << ob2; cout << "dwa obiekty: " << endl; total = ob1 + ob2; cout << total; total = ob1.operator +( ob2 ); cout << total; cout << endl; cout << "obiekt i liczba:" << endl; total = ob1 + 2.5; cout << total; total = ob2.operator +( 2.5 ); cout << total; cout << endl; cout << "liczba i obiekt:" << endl; total = 2.5 + ob1; cout << total; total = operator +( 2.5, ob2 ); cout << total; cout << endl; _getch(); }
Jak możecie to skompilujcie to u siebie. Piszę sobie takie proste przykłady użycia przeciążonych operatorów żeby mieć pod ręką jak czegoś zapomnę. Jednak jest kłopot z operatorem<<. Jak napiszę sobie metodę show() do pokazywania obiektów jest ok. Program powinien działać prawidłowo, przynajmniej nie widzę tu jakiś nieprawidłowości. Jeśli będzie ok to kompilator strzela fochy. |
|
mateczek |
sprawdziłem » 2015-09-19 19:09:41 sprawdziłem ale tylko dla kodu jak poniżej. main() { klasa obiekt; cout << obiekt; }
Wydaje się ok!!! może spróbuj przebudować projekt. Rebuild. Lub wyczyść wszystko i zbuduj odnowa (czasem tak się dzieje że coś nie gra i trzeba przebudować). |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-09-19 20:04:37 Próbowałem tez czyścić kompilacje i budować od nowa. Pisałem to trzy razy od nowa. Wszystko działa ale jak dodam przeciążenie << to lipa. Opertory arytmetyczne są ok. Dzięki za look'nięcie. Jak znajdę rozwiązanie to dam znać. |
|
notabigthreat |
» 2015-09-19 20:10:40 Jak dokładnie wygląda log kompilacji? |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-09-19 20:34:15 Jestem poza domem. Dokladnie w funkcji friend & ostream operator << mówi ze os jest niezdefiniowane, jakby byla literowka w nazwie zmiennej. Jutro wrzucę dokładny log. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-09-19 22:33:16 Ważność Kod Opis Projekt Plik Wiersz Błąd C2065 "os": niezadeklarowany identyfikator operator cout g:\visual 2015\język c++\klasy\operator cout\operator cout\op_cout.cpp 26
Ważność Kod Opis Projekt Plik Wiersz Błąd (aktywny) identyfikator "os" jest niezdefiniowany operator cout g:\Visual 2015\Język C++\Klasy\operator cout\operator cout\op_cout.cpp 26
Myślę że to może być błąd kompilatora. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-09-19 23:54:16 Już nie zawracam głowy. Przykład działa poprawnie. Visual robił fochy po aktualizacji Azure. Przeinstalowałem na "świeżo" i hula. Nie wiem co Azure ma do rzeczy, ale tylko tego nie aktualizowałem i wszystko działa. Dzięki za chęci!!! |
|
« 1 » |