Konstruktor z referencjami - ambiguos

ktos7823
2011-07-21 11:38
ktos7823
0

mam sobie wzorzec:

template<typename T>
class MojaKlasa
{
public:
...
    PodKlasa<T> &getX()const
    {
        PodKlasa<T>& result = x ;  // tu mi wy wala błąd
        return result ;
    }
    bool operator==(MojaKlasa<T> &other)
    {
    ...
    }
private:
    PodKlasa<T> x ;
};

chcę, aby gettery zwracały referencje, nie wartości
dlaczego mi wywala błąd:

In file included from test/MojaKlasaTest.cpp:4:
src/MojaKlasa.h: In member function ‘PodKlasa<T>& MojaKlasa<T>::getX() const [with T = int]’:
test/MojaKlasaTest.cpp:31:   instantiated from here
src/MojaKlasa.h:44: error: invalid initialization of reference of type ‘PodKlasa<int>&’ from expression of type ‘const PodKlasa<int>’

?

Pozostało 580 znaków

ktos7823
2011-07-21 11:38
ktos7823
0

dałem zły temat. miało być getter

Pozostało 580 znaków

2011-07-21 12:24

Rejestracja: 12 lat temu

Ostatnio: 2 minuty temu

0

invalid initialization of reference of type ‘PodKlasa<int>&’ from expression of type ‘const PodKlasa<int>’
Do nie-consta przypisujesz consta.

Pozostało 580 znaków

ktos7823
2011-07-21 12:39
ktos7823
0

jak mogę temu szybko zaradzić? rzutowanie nie działa

Pozostało 580 znaków

2011-07-21 12:53
Moderator

Rejestracja: 16 lat temu

Ostatnio: 24 minuty temu

0

o_O Proponuje zacząć od nauki programowania. Zwracaj const referencje, albo usuń const za metodą. MYŚL! const za deklaracją metody oznacza że ta metoda nie spowoduje zmiany stanu obiektu. Ale skoro chcesz zwrócic referencję to stan obiektu w wyniku działania tej metody moze ulegać zmianie! Musisz się zdecydować, albo metoda zmienia obiekt albo go nie zmienia. Od biedy mozesz oznaczyć to pole przez mutable, ale musisz wiedzieć co robisz...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

ktos7823
2011-07-21 14:10
ktos7823
0

dzięki.
twoje programistyczne porady mi nie pomogły od razu, ale "MYŚL!" zadziałało.

Ja czasem tak mówię do siebie ;) - Sarrus 2011-07-21 15:07

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0