[C++, dziedziczenie] Nie działa const przy przeciążeniu operatora <<
Ostatnio zmodyfikowano 2014-01-11 15:44
dziabongo Temat założony przez niniejszego użytkownika |
[C++, dziedziczenie] Nie działa const przy przeciążeniu operatora << » 2014-01-09 15:05:09 mam takie clasy #ifndef _CLASS_DZIEDZICZENIE #define _CLASS_DZIEDZICZENIE
#include <string>
class pracownik { private: std::string m_fullName; std::string m_adres; unsigned int m_nip; public: pracownik() { }; pracownik( const char * imie, const char * adres, unsigned int nip ); pracownik( const std::string imie, const std::string adres, unsigned int nip ); virtual void show( void ); friend std::ostream & operator <<( std::ostream & os, const pracownik & x ); };
class programista : public pracownik { private: std::string m_language; public: programista() : pracownik() { }; programista( const char * imie, const char * adres, unsigned int nip, const char * jezyk ); programista( std::string imie, std::string adres, unsigned int nip, std::string jezyk ); virtual void show( void ); friend std::ostream & operator <<( std::ostream & os, programista & x ); };
class piosenkarz : public pracownik { private: int voisceStrenght; public: piosenkarz() : pracownik() { }; piosenkarz( const char * imie, const char * adres, unsigned int nip, int glos ); piosenkarz( std::string imie, std::string adres, unsigned int nip, int glos ); virtual void show( void ); friend std::ostream & operator <<( std::ostream & os, piosenkarz & x ); }; #endif i w klasie programista oraz piosenkarz przeczenie operatora <<, i kiedy dopisze const do elementów po prawej stronie czyli tak : friend std::ostream & operator <<( std::ostream & os, const programista & x ); friend std::ostream & operator <<( std::ostream & os, const piosenkarz & x );
i tak samo dopisze ten const w definicji to mam taki błąd undefined reference to `operator<<(std::ostream&, programista&) undefined reference to `operator<<(std::ostream&, piosenkarz&) ..... a bez tych const wszystko działą. I jak mozna zauwazyć const mam też w klasie bazowej przy tym operatoze i oto się nie skarży std::ostream & operator <<( std::ostream & os, const pracownik & x ) { os << "Imie i nazwisko: " << x.m_fullName << std::endl << "Adres: " << x.m_adres << std::endl << "NIP: " << x.m_nip << std::endl; return os; } std::ostream & operator <<( std::ostream & os, const programista & x ) { os <<( const pracownik & ) x; os << "Jezyk: " << x.m_language << std::endl; return os; } std::ostream & operator <<( std::ostream & os, const piosenkarz & x ) { os <<( const pracownik & ) x; os << "Sila glosu: " << x.voisceStrenght << std::endl; return os; } |
|
dziabongo Temat założony przez niniejszego użytkownika |
» 2014-01-10 19:08:30 jakieś pomysły dlaczego tak jest??
|
|
DejaVu |
» 2014-01-10 22:40:03 'Dziwne, u mnie działa...' #include <iostream>
class A { int m_a; friend std::ostream & operator <<( std::ostream &, const A & ); };
class B : A { int m_b; friend std::ostream & operator <<( std::ostream &, const B & ); };
std::ostream & operator <<( std::ostream & os, const A & x ) { os << "m_a = " << x.m_a << std::endl; return os; }
std::ostream & operator <<( std::ostream & os, const B & x ) { os << reinterpret_cast < const A &>( x ); os << "m_b = " << x.m_b << std::endl; return os; }
int main() { A a; B b; std::cout << a << b; return 0; }
|
|
dziabongo Temat założony przez niniejszego użytkownika |
» 2014-01-11 15:08:27 a najdziwniejsze jest to że jak w devie zrobiłem nowy projekt, i przekopiowałem cały kod, nic nie zmieniłem po prostu kopiuj wklej i zadziałało, w visualu tez. A projekt z którego kopiowałem wciąż nie działa. |
|
DejaVu |
» 2014-01-11 15:44:40 Temat zamykam, bo problem w zasadzie jest rozwiązany (patrząc z punktu widzenia poprawności składni kodu). Może po prostu projekt masz źle skonfigurowany, np. nie dodałeś pliku *.cpp do projektu z implementacją operatorów, skoro linker ich nie widzi. Druga opcja: rebuild całego projektu - czasami pomaga na 'dziwne' przypadki. |
|
« 1 » |