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

niezrozumiały Błąd w kodzie C++

Object Storage Arubacloud
0 głosów
204 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez Krloo Początkujący (480 p.)

mam 2 wersje tego samego kodu 

1 wersja:

cout << "Ile wczytujesz?" << endl;
        do{
            cin >> x;
            if(x<=0){cout << "X" << endl;}
        }while(x<=0);

        for(int i = x;i >=0; i--)
        {
            Bron Bron[wyznacznik];
cout << "=Dodaj Bron="<<endl;
        cout << "id: "<< wyznacznik <<endl;
        cout << "Bron > "; cin >> Bron[wyznacznik].nazwa;
        cout << "amunicja [pistoletowa/snajperska/ostra] > "; cin >> Bron[wyznacznik].amunicja;
        cout << "Nazwa > "; cin >> Bron[wyznacznik].loscAmunicj;
            wyznacznik++;
        }

Rezultat: 

nie można wpisać danych, bo program przestaje zdziałać 

2 wersja:

{
    public:
    string nazwa;
    string amunicja;
    int iloscAmunicj;

    void Dodaj(int = wyznacznik)
    {
        cout << "=Dodaj Bron="<<endl;
        cout << "id: "<< wyznacznik <<endl;
        cout << "Bron > "; cin >> nazwa;
        cout << "amunicja [pistoletowa/snajperska/ostra] > "; cin >> amunicja;
        cout << "Nazwa > "; cin >> iloscAmunicj;
    }
};
...

cout << "Ile wczytujesz?" << endl;
        do{
            cin >> x;
            if(x<=0){cout << "X" << endl;}
        }while(x<=0);

        for(int i = x;i >=0; i--)
        {
            Bron Bron[wyznacznik];
            Bron.Dodaj(int=wyznacznik);
            wyznacznik++;
        }

Rezultat:

Błąd w 'void Dodaj(int = wyznacznik)'

tytuł błędu:

error: 'wyznacznik' was not decylared in this scope

męczę się z tym 2-3godziny

komentarz 18 grudnia 2022 przez Oscar Nałogowiec (29,320 p.)
for(int i = x;i >=0; i--)
{
     Bron Bron[wyznacznik];
     cout << "=Dodaj Bron="<<endl;
     cout << "id: "<< wyznacznik <<endl;
     cout << "Bron > "; cin >> Bron[wyznacznik].nazwa;
     cout << "amunicja [pistoletowa/snajperska/ostra] > "; cin >> Bron[wyznacznik].amunicja;
     cout << "Nazwa > "; cin >> Bron[wyznacznik].loscAmunicj;
     wyznacznik++;
}

W powyższej pętli za każdym razem deklarujesz coraz większą tabelkę i za każdym razem wychodzisz poza jej zakres. Tablica [N] ma elementy od 0 do N-1.

W sumie nawet nie wiem, czy jest to dozwolone, ale nadajesz taką samą nazwa dla typu i dla zmiennej.

1 odpowiedź

+1 głos
odpowiedź 18 grudnia 2022 przez Wiciorny Ekspert (270,170 p.)
wybrane 18 grudnia 2022 przez Krloo
 
Najlepsza
 void Dodaj(int = wyznacznik)

co chcesz tym osiągnąć? "int" to typ zmiennej a ty do typu zmiennej próbujesz przekazać "wyznacznik" czyli przypisujesz nazwe parametru, który przyjmuje metoda... sygnatura metody wygląda tak 
 

 typ_zwaracany Dodaj(typ_argumentu nazwa_argumentu)
e.g
 void Dodaj(int wyznacznik)


nastepnie jak wywolujesz metode to przekazujesz do niej "zmienna" jej wartość lub referencje zaleznie od języka 
 

Bron.Dodaj(int=wyznacznik); // to nie ma prawa dzialac

po pierwsze nigdzie nie ma zmiennej wyznacznik, po drugie nie istnieje taka operacja jak przypisanie do typu.  sama deklaracja "int wyznacznik" jest juz jakby przypisaniem typu zmiennej samej w sobie.

Dodaj zmienna int wyznacznik w kodzie np. 

 

    public:
    string nazwa;
    string amunicja;
    int iloscAmunicj;
    int wyznacznik;

a przekazujesz ja do metod tak 
 

Bron.Dodaj(wyznacznik);
natomiast deklaracja funkcji
void Dodaj(int wyznacznik) ( przyczym tutaj nazwa moze byc calkiem inna bo to jest sygnatura)


Funkcje c++ https://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Funkcje-pierwsze-starcie/291
zmienne c++ https://www.algorytm.edu.pl/wstp-do-c/typy-zmiennych.html

1
komentarz 18 grudnia 2022 przez Krloo Początkujący (480 p.)
edycja 18 grudnia 2022 przez Krloo
Dzięki

ale tam powinno być jeszcze Bron[wyznacznik].Dodaj(wyznacznik); a nie samo Bron.Dodaj(wyznacznik); jak by co
komentarz 18 grudnia 2022 przez Wiciorny Ekspert (270,170 p.)
nie wiem czy jest Bron wiec ja tylko piszę to co widzę w twoim kodzie sam zapis
 Bron Bron[wyznacznik]; jest bardzo niepraktyczna tworzysz tablice o wielkosci "wyznacznik" generalnie o takiej samej nazwie jak typ danych co w dluzszej mize jest mylace...
funkcje, zmienne powinny byc pisane z malej litery czesto cammel-casem ale sa tez inne techniki.

Podobne pytania

0 głosów
1 odpowiedź 1,645 wizyt
pytanie zadane 11 kwietnia 2016 w C i C++ przez timrh Mądrala (6,030 p.)
0 głosów
2 odpowiedzi 213 wizyt
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 1 listopada 2023 w Python przez mark162 Początkujący (410 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 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!

...