• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze wskaźnikami - błąd

Object Storage Arubacloud
0 głosów
273 wizyt
pytanie zadane 4 sierpnia 2016 w C i C++ przez Piotr Lis Obywatel (1,310 p.)
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <windows.h>
#include <algorithm>
#include <string>
using namespace std;

int liczba;
int*liczba_w;
*liczba_w=&liczba;          //tu oznaczany jest blad

string agree; //odpowiedz
int liczba_prob=0;

int nie()
{
std::cout << "No to Pa, Pa" << endl;
system("pause");
exit(0);
}
int tak()
{
liczba_prob++;
std::cout << liczba_prob << ". Rzut odbedzie sie za: \n" << endl;
for(int i=3;i>=1;i--)
    {
Sleep(1000);
std::cout << i << "\a" << endl;
    }
system("cls");
srand(time(NULL));
*liczba_w=rand()%6+1;
std::cout << "Wylosowana liczba to " << *liczba_w << endl;
std::cout << "Czy chcesz losowac " << liczba_prob+1 << " raz ?" << endl;
            std::cout << "\tTAK/NIE" << endl;                    std::cin >> agree;
transform(agree.begin(), agree.end(), agree.begin(), ::toupper);
system("cls");
if(agree=="TAK")
            {
            tak();
            }
}
int main()
{
            std::cout << "Witaj w symulatorze rzutu kostka !" << endl;
            std::cout << "\nCzy chcesz wykonac pierwszy rzut ?" << endl;
            std::cout << "\tTAK/NIE" << endl;
                    cin >> agree;
                    system("cls");
transform(agree.begin(), agree.end(), agree.begin(), ::toupper);
            if(agree=="TAK")
            {
            tak();
            }
            if(agree=="NIE")
            {
            nie();
            }
            if((agree!="TAK")&&(agree!="NIE"))
            {
            do
            {
            std::cout << "\tNapisz TAK lub NIE" << endl;
                    cin >> agree;
                    system("cls");
transform(agree.begin(), agree.end(), agree.begin(), ::toupper);
            if(agree=="TAK")
            {
            tak();
            }
            if(agree=="NIE")
            {
            nie();
            }
            }while((agree!="TAK")&&(agree!="NIE"));
            }
}

Witam, chciałem zobaczyć jak działają wskaźniki w praktyce, jednakże kompilator Code::Blocks pokazuje następujący błąd w 12 linijce, który brzmi:

error: expected constructor, destructor, or type conversion before '=' token

Dziękuję z góry za odpowiedzi, poprosiłbym rówierz o małe wyjaśnienie skąd ten błąd się wziął. Pozdrawiam. laugh

5 odpowiedzi

+4 głosów
odpowiedź 4 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)
wybrane 4 sierpnia 2016 przez Piotr Lis
 
Najlepsza

Jeżeli przy wskaźniku znajduje się gwiazdka to następuje odwołanie się do wartości, na którą pokazuje wskaźnik.. ampersand (&) natomiast (przy zwykłej zmiennej; niewsaźnikowej) zwraca adres zmiennej.
Ten zapis: *liczba_w=&liczba;
można odczytać tak:
Do komórki, na którą pokazuje wskaźnik liczba_w przypisz adres zmiennej liczba.. to nie ma sensu.
Musisz się zdecydować.. albo przypisujesz jakąś wartość do komórki, na którą pokazuje wskaźnik:
*liczba_w=liczba;
albo przypisujesz inny adres do wskaźnika:
liczba_w=&liczba;

1
komentarz 5 sierpnia 2016 przez draghan VIP (106,230 p.)

Ode mnie upvote za klarowne wyjaśnienie. :)

Dopowiem tylko, że wyrażenie:

*liczba_w = &liczba;

ma jak najbardziej sens, ale tylko wtedy, gdy liczba_w jest wskaźnikiem na wskaźnik.

Można też popuścić wodze fantazji: jeśli potrzebujemy pod adresem, wskazywanym przez liczba_w, trzymać - w nieznanym bliżej celu - adres zmiennej liczba bez informacji o typie zmiennej. Do takiego działania potrzebne jest jednak rzutowanie (na całe szczęście) i nie potrafię znaleźć zastosowania dla tego zabiegu, którego nie dałoby się osiągnąć inną drogą.

+1 głos
odpowiedź 4 sierpnia 2016 przez niezalogowany
popraw czytelność kodu, poza tym wydaje mi się że to jest operacja przypisania więc to już musi być w funkcji poza tym jak robisz funkcje to nie rób zmiennych globalnych
+1 głos
odpowiedź 4 sierpnia 2016 przez jpacanowski VIP (101,940 p.)

Przypisanie musi być w funkcji.

Po drugie, nie:

*liczba_w=&liczba;

tylko:

liczba_w=&liczba;
1
komentarz 4 sierpnia 2016 przez criss Mędrzec (172,590 p.)
Nie musi, jeśli jest jednoczesne z deklaracją.
+1 głos
odpowiedź 4 sierpnia 2016 przez criss Mędrzec (172,590 p.)
operator & wzraca adres (powiedzmy wskaźnik). Więc zwracaną przez niego wartość powinieneś przypisać do wskaźnika, a nie do tego na co wskaźnik wskazuje (*liczba_w - operatorem gwiazdki dostajesz się do tego na co wskaźnik wskazuje). Także ta gwiazdka w 11 linii jestzbędna.
komentarz 4 sierpnia 2016 przez Piotr Lis Obywatel (1,310 p.)

Tu się akurat nie zgodzę ponieważ gwiazdka w linii 11 jest niezbędnawink

komentarz 5 sierpnia 2016 przez criss Mędrzec (172,590 p.)

*liczba_w=&liczba; 

W tej linii. U mnie to jest 11 :P

0 głosów
odpowiedź 4 sierpnia 2016 przez Piotr Lis Obywatel (1,310 p.)

Bardzo dziękuje wszystkim za odpowiedzi laugh

Program już działa wink.Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 94 wizyt
pytanie zadane 4 maja 2020 w C i C++ przez Quba Użytkownik (870 p.)
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 26 lutego 2017 w C i C++ przez Mikusbombro Użytkownik (990 p.)

92,579 zapytań

141,430 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...