Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, dziedziczenie] Nie działa const przy przeciążeniu operatora <<

Ostatnio zmodyfikowano 2014-01-11 15:44
Autor Wiadomość
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
C/C++
#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 :
C/C++
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
C/C++
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;
}
P-101667
dziabongo
Temat założony przez niniejszego użytkownika
» 2014-01-10 19:08:30
jakieś pomysły dlaczego tak jest??
P-101788
DejaVu
» 2014-01-10 22:40:03
'Dziwne, u mnie działa...'

C/C++
#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;
}
P-101812
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.
P-101841
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.
P-101849
« 1 »
  Strona 1 z 1