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

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!

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... ;]

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!

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;
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...

0

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

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?

1

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

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