mam takie klasy
#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 : virtual 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 : virtual 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 problem mam taki, przy przeciązeniu operatora << w klasach które dziedziczą po klasie pracownik nie moge dac const przy moim obiekcie
czyli jak napisze tak
friend std::ostream & operator<<(std::ostream & os, const piosenkarz & x);
friend std::ostream & operator<<(std::ostream & os, const programista & x);
i tak samo dopisze const w definicji to kompilator zgłasza błąd
undefined reference to operator<<(std::ostream&, programista& undefined reference to
operator<<(std::ostream&, piosenkarz&)
oto zawartość tych funkcji
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, programista & x)
{
os << (const pracownik &)x;
os << "Jezyk: " << x.m_language << std::endl;
return os;
}
std::ostream & operator<<(std::ostream & os, piosenkarz & x)
{
os << (const pracownik &)x;
os << "Sila glosu: " << x.voisceStrenght << std::endl;
return os;
}
jak widać klasa bazowa posiada to const i kompilator się nieskarży więc dlaczego przy dziedziczeniu sie skarzy??