Odwołania do obiektów miedzy klasami.

0
 public  void RuchPionka1()
            {
                _form1.labelOpisPola.Text = _kostka.AktualnieWylosowano2.ToString();
            }

metoda "RuchPionka1()" jest w klasie "Gra", natomiast "_form1" i "_kostka" to dwie osobne klasy. Wszystkie klasy ustawiłem jako publiczne, zmienne również. Co może być powodem tego błędu?

Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu

0

Sprawdź czy pole _kostka i _form zostały odpowiednio zainicjowane

0

AktualnieWylosowano2 jest null ?

1
W2K napisał(a):

Sprawdź czy pole _kostka i _form zostały odpowiednio zainicjowane

W klasie Form1 wygląda tak:

public readonly Kostka _kostka;
public readonly Gra _gra;

W klasie _gra:

public readonly Kostka _kostka;
public readonly Form1 _form1;

w klasie _kostka zmienne wyglądają tak:

public int AktualnieWylosowano { get; private set; }
public int AktualnieWylosowano2 { get; private set; }
0

Czemu Kostka jest readonly?

0

W jaki sposób tworzysz obiekt klasy Kostka ?

1
a_s_f napisał(a):

Czemu Kostka jest readonly?

a jak powinna być żeby było dobrze? Założyłem że tylko do odczytu wystarczy do tej operacji. Próbowałem bez readonly i efekt bez zmian.

W2K napisał(a):

W jaki sposób tworzysz obiekt klasy Kostka ?

 public class Kostka
    {
        public readonly Random _random;
        public readonly int _iloscScian;
        private int _poprzedniLos;
        private int _poprzedniLos2;

        public Kostka(int iloscScian)
        {
            _random = new Random();
            _iloscScian = iloscScian;
        }

        public int AktualnieWylosowano { get; private set; }
        public int AktualnieWylosowano2 { get; private set; }
        

        //Random kostka 1
        public void Przekulnij()
        {
            while (AktualnieWylosowano == _poprzedniLos)
            {
                AktualnieWylosowano = _random.Next(1, _iloscScian + 1);
            }

            _poprzedniLos = AktualnieWylosowano;
        }
        //Random kostka 2
        public void Przekulnij2()
        {
            while (AktualnieWylosowano2 == _poprzedniLos2)
            {
                AktualnieWylosowano2 = _random.Next(1, _iloscScian + 1);
            }

            _poprzedniLos2 = AktualnieWylosowano2;
           
        }
    }
0

Pokaż konstruktor klasy Gra, albo konkretny fragment gdzie tworzysz obiekty w tejże klasie. Jeżeli takowych nie ma to oznacza że masz przyczynę Twojego błędu ;)

0

Nie chodzi mi o klasę, chodzi mi o tworzenie jej obiektu(miejsce w stylu: _kostka=new Kostka(); )

0
AlfaLeporis napisał(a):

Pokaż konstruktor klasy Gra, albo konkretny fragment gdzie tworzysz obiekty w tejże klasie. Jeżeli takowych nie ma to oznacza że masz przyczynę Twojego błędu ;)

 public class Gra
    {
        private readonly Kostka _kostka;
        private readonly Form1 _form1;
       
        
        public List<int> pozycjaX = new List<int>();
        public List<int> pozycjaY = new List<int>();

        public int PozycjaPionka1X;
        public int PozycjaPionka1Y;
        public int IloscOczek;
.......
.......
.......

}
0

A fragment gdzie inicjalizujesz zmienne _kostka i _form1?

0
AlfaLeporis napisał(a):

A fragment gdzie inicjalizujesz zmienne _kostka i _form1?

Poniżej:

 
 public Form1(FormWstepniak formWstepniak)
        {
            _gra = new Gra();
            

            this.formWstepniak = formWstepniak;
            InitializeComponent();
            
           .....
           ......

            _kostka = new Kostka(6);
        }
0

Nazywanie parametrów funkcji i właściwości tak samo to IMHO dość ryzykowny sposób. Jesteś pewny że nie przekazujesz do tego konstruktora null albo okno którego nie zainicjalizowałeś? Gdybyś użył debuggra to od razu miałbyś odpowiedź co jest nie tak

0
AlfaLeporis napisał(a):

Nazywanie parametrów funkcji i właściwości tak samo to IMHO dość ryzykowny sposób. Jesteś pewny że nie przekazujesz do tego konstruktora null albo okno którego nie zainicjalizowałeś? Gdybyś użył debuggra to od razu miałbyś odpowiedź co jest nie tak

Używam debbugera, i wygląda że jest ok, z klasy Form1 da się wykonać daną operację lecz jeżeli metodę tworzę w klasie gra dalej pojawia się problem.

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