Wskaźnik na stałą - błąd kompilacji

Odpowiedz Nowy wątek
2015-01-16 19:08
Świetny Krawiec
0

Witam,
mam mniej więcej takie dwie klasy:

class Klasa1
    {
    public:
        void SetWsk(const int*& wsk_org)
            {
            wsk_int = wsk_org;
            }
        const int* wsk_int;
    };

class Klasa2
    {
    public:

        const Klasa1* wsk_do_K1;    //jak wywalę const to jest wszystko ok! Ale jak zastosuję const to jest error!!!
        Klasa1 obiekt_K1;
        void SetWsk()
            {
            obiekt_K1.SetWsk(wsk_do_K1->wsk_int);   //CZEMU TU JEST BŁĄD? przecież argumentem jest const int*&
            }
    };

Moje pytanie brzmi: czemu wsk_do_K1 NIE może być const?!? Wywala mi błąd kompilacji:

error C2664: 'void Klasa1::SetWsk(const int &)' : cannot convert argument 1 from 'const int const ' to 'const int *&'

Z góry dzięki za pomoc!

Pozostało 580 znaków

2015-01-16 19:11
3

A wiesz czym się różni wskaźnik do stałego inta od stałego wskaźnika do inta? Tym co picie w szczawnicy od szczania w piwnicy... ;]


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Genialny tekst - spartanPAGE 2015-01-16 19:46

Pozostało 580 znaków

2015-01-16 19:26
Zimny Samiec
0
Shalom napisał(a):

A wiesz czym się różni wskaźnik do stałego inta od stałego wskaźnika do inta? Tym co picie w szczawnicy od szczania w piwnicy... ;]

const int* wsk_do_stalego_int;
int* const staly_wsk_do_int;

Z tym, że u mnie nie ma int* const!

Pozostało 580 znaków

2015-01-16 19:30
0

Jest bo obiekt w którym sie znajduje jest const.

        void SetWsk(const int* const& wsk_org)
            {
                wsk_int = wsk_org;
            }
        const int* wsk_int;

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 3x, ostatnio: Shalom, 2015-01-16 19:34

Pozostało 580 znaków

2015-01-16 19:41
Zimny Samiec
0
Shalom napisał(a):

Jest bo obiekt w którym sie znajduje jest const. Powinieneś też pewnie mieć "const" za tą metodą, bo nie zmienia argumentu.
Ale wtedy zobaczysz że próbujesz coś wpisać do STAŁEGO WSKAŹNIKA czego robić ci nie wolno. Nie możesz mieć setera dla czegoś co jest const...

Ale chwila, chwila! Zmieniłem nieco komentarz:

class Klasa2
    {
    public:
        const Klasa1* wsk_do_K1;    //wskaźnik do stałej
        Klasa1 obiekt_K1;           //obiekt nie stały!
        void SetWsk()
            {
            obiekt_K1.SetWsk(wsk_do_K1->wsk_int);   /*obiekt nie stały wywołuje SetWsk() a jako argument podaje odczytaną wartość wskaźnika do stałego int*/
            }
    };

Ja ze zmiennej wsk_do_K1 próbuję tylko odczytać dane a nie je zmienić!
Nie rozumiem tego...

Pozostało 580 znaków

2015-01-16 19:42
Zimny Samiec
0

@Shalom
Dzięki wielkie! Działa! ;D
Ciągle trochę tego nie rozumiem, ale pomyślę nad tym ;-)

Pozostało 580 znaków

2015-01-17 01:06
Czarny Samiec
0

Oki dokY! Po dłuższej przerwie i przeanalizowaniu jeszcze raz problemu zrozumiałem o co kaman! ;-)
Tak więc jeszcze raz dzięki!

Mam jeszcze jedno pytanie: czy kompilator może inaczej skompilować kod, gdy przy jakiejś zmiennej postawimy const? Tzn. czy stosowanie const może przynieść w pewnych sytuacjach korzyści/straty również np. w wydajności? Czy to jest tylko dla naszego bezpieczeństwa?

Pozostało 580 znaków

2015-01-17 01:18
1

Tylko aby sobie kuku nie zrobić.
Ale stałe mogą być utworzone w innym obszarze niż zmienne.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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