• 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++

Aruba Cloud - Virtual Private Server VPS
0 głosów
242 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez Krloo Użytkownik (530 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,340 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 (279,870 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 Użytkownik (530 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 (279,870 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,898 wizyt
pytanie zadane 11 kwietnia 2016 w C i C++ przez timrh Mądrala (6,010 p.)
0 głosów
2 odpowiedzi 280 wizyt
0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 1 listopada 2023 w Python przez mark162 Początkujący (410 p.)

93,279 zapytań

142,278 odpowiedzi

322,298 komentarzy

62,599 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...