'd' was not declared in this scope

0

Jestem początkującym programistą, od paru tygodni nic nie pisałem, dzisiaj usiadłem ale nie mogę ogarnąć co zrobiłem tutaj źle. błąd wyskakuje tylko do linijki 17 i 19; przy 20, 23 i 26 nic nie wyskakuje.

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>
#include <ctime>
#include <fstream>
#include <cmath>

#include "naglowki.h"

using namespace std;

void statystki::wprowadzdruzyny()
{
    system("cls");
    licznik=0;
    while(d[licznik].istnieje)licznik++; //to ta linia
    cout<<"Podaj nazwe druzyny: ";
    cin>>d[licznik].nazwa; //to ta linia
    d[licznik].istnieje=true;
    for(int i=licznik;i!=0;licznik--)
    {
        if(d[licznik].nazwa==d[i].nazwa)
        {
            cout<<"taki klub juz jest w systemie!"<<endl;
            d[licznik].istnieje=false;
        }
    }
}

0

Nie chce mi się liczyć linijek, ale sprawa powinna być oczywista: nie masz zadeklarowanej zmiennej d.

PS: po co Ci tyle zbędnych nagłówków? Używaj ich jak najmniej, szczególnie windows.h i conio.h

0
kq napisał(a):

Nie chce mi się liczyć linijek, ale sprawa powinna być oczywista: nie masz zadeklarowanej zmiennej d.

PS: po co Ci tyle zbędnych nagłówków? Używaj ich jak najmniej, szczególnie windows.h i conio.h

nagłówki napisałem wszystkie które mam w programie

d jest obiektem, w innym miejscu stworzonym

0

W takim razie albo musisz go przekazać do funkcji, albo uczynić go obiektem klasy lub globalnym. To ostatnie to leniwe i złe rozwiązanie.

0
kq napisał(a):

W takim razie albo musisz go przekazać do funkcji, albo uczynić go obiektem klasy lub globalnym. To ostatnie to leniwe i złe rozwiązanie.

źle się wyraziłem, klasa drużyny (której obiektami są d[]) jest zagnieżdżona w klasie statystyki

0

Szklana Kula już świętuje Wielkanoc, więc zmuszony jestem poprosić o pokazanie kodu.

0

Mam nadzieję że szklana kula za niedługo wróci do swoich obowiązków, z okazji jej braku jestem w stanie udostępnić kod. (jestem początkujący i nie zawsze ogarniam jak się w sytuacjach zachować, proszę o wyrozumiałość)

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>
#include <ctime>
#include <fstream>
#include <cmath>

using namespace std;

class statystki
{
    public:
    class druzyny
    {
    bool istnieje;
    string nazwa;

    };
    void menustart();//menu startowe
    void wprowadzdruzyny();//funkcja do wprowadzania druzyn
    void wprowadzmecz();//funkcja do wprowadzania meczu
    char wybor;//pomocnicza zmienna do switchow
    int licznik;//pomocniczy liczbik do petli
    statystyki();
};
int main()
{
statystki s1;
s1.menustart();
}

statystki::statystyki()
{
    druzyny d[1000];
}

void statystki::menustart()
{
    system("cls");
    cout<<"Witaj w centrum statystyk!"<<endl;
    cout<<endl;
    cout<<"1) Wprowadz druzyny"<<endl;
    cout<<"2) Wprowadz mecz"<<endl;
    cout<<"0) Wyjdz"<<endl;

    while(wybor!='0'&&wybor!='1'&&wybor!='2')
    {
        wybor=getch();
        switch(wybor)
            {
            case'1':wprowadzdruzyny();break;
            case'2':wprowadzmecz();break;
            case'0':exit(0);break;
            }
    }
}

void statystki::wprowadzdruzyny()
{
    system("cls");
    licznik=0;
    while(d[licznik].istnieje)licznik++;
    cout<<"Podaj nazwe druzyny: ";
    cin>>d[licznik].nazwa;
    d[licznik].istnieje=true;
    for(int i=licznik;i!=0;licznik--)
    {
        if(d[licznik].nazwa==d[i].nazwa)
        {
            cout<<"taki klub juz jest w systemie!"<<endl;
            d[licznik].istnieje=false;
        }
    }
}

void statystki::wprowadzmecz()
{
    system("cls");
}

0

W definicji klasy statystyki nie widzę d. (Kompilator też nie widzi i dlatego narzeka)

0

Ale klasa druzyny jest wewnątrz klasy statystyki, a d to obiekty klasy druzyny. Już nic z tego nie ogarniam, a w szczególności dlaczego w dwóch momentach występuje błąd a w trzech kolejnych nie

1

Poczytaj o różnicy obiekt/instancja vs klasa, bo to chyba jest u Ciebie problemem.

statystki::statystyki()
{
    druzyny d[1000];
}

Tutaj masz lokalną zmienną wewnątrz konstruktora - nie jest to zmienna klasy, tylko zmienna w tej funkcji. Jak chcesz aby była zmienną klasy to przenieś jej definicję do definicji klasy.

0
kq napisał(a):

Poczytaj o różnicy obiekt/instancja vs klasa, bo to chyba jest u Ciebie problemem.

statystki::statystyki()
{
    druzyny d[1000];
}

Tutaj masz lokalną zmienną wewnątrz konstruktora - nie jest to zmienna klasy, tylko zmienna w tej funkcji. Jak chcesz aby była zmienną klasy to przenieś jej definicję do definicji klasy.

Dziękuję bardzo, trochę mi się pomieszała wiedza o konstruktorach i przez to wynikły moje błędy. Po zmianie miejsca program działa dobrze.

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