Saya menulis permainan ular di c ++ di konsol dan saya memiliki beberapa masalah yang tidak dapat saya mengerti. Adakah yang bisa membantu saya? Menurut kode di bawah ini:

class Snake : public Fruit{
    private:
        int head;
        short dir_x;    //-1 (left or down) / +1 (right or up)
        short dir_y;

        friend class Game;

        int base_length = 3;    // base length of snake on start of the game
        const int length = Board::global_x * Board::global_y;   // max length
        int prev_tailPos[2];    // previous tail position (end of snake)
        int tail;               // tail is sum of base_length and score             
        int time = 100;         //  delay for snake

        struct Body{
            int body_pos[2]; // position of every element of snakes body
            Body* higherEl;  // point element nearer head element
        };
        Body* body = new Body[length];  // array for body of snake
};

Dengan urutan itu semuanya baik-baik saja, tetapi jika saya meletakkan definisi struct Body, dan body di atas kelas itu, begitu saja:

class Snake : public Fruit{
    private:
        struct Body{
            int body_pos[2]; // position of every element of snakes body
            Body* higherEl;  // point element nearer head element
        };
        Body* body = new Body[length];  // array for body of snake

        int head;
        short dir_x;    //-1 (left or down) / +1 (right or up)
        short dir_y;

        friend class Game;

        int base_length = 3;    // base length of snake on start of the game
        const int length = Board::global_x*Board::global_y; // max length
        int prev_tailPos[2];    // previous tail position (end of snake)
        int tail;               // tail is sum of base_length and score             
        int time = 100;         //  delay for snake
};

Setelah saya menghentikan permainan, kesalahan ini muncul:

> Unhandled Exception at 0x76C40860 (sechost.dll) in Snake.exe: 
> 0xC0000005: Access violation reading location 0x00000004`

Dapatkah seseorang membantu saya mengapa itu menjadi masalah?

0
Tojmak 19 September 2019, 18:08

1 menjawab

Jawaban Terbaik

Tampaknya dalam contoh kedua Anda, variabel length tidak ditentukan pada saat mengevaluasi
Body* body = new Body[length];.

Ini kemungkinan besar masalah Anda.

Untuk menjelaskan ini sedikit lebih jauh, Anda perlu memahami bahwa:
Urutan deklarasi variabel di dalam kelas/struct adalah penting.

Menggambarkan:

class Data{
    int a = 10;
    int b = a;
};

Dalam contoh ini, baik a dan b akan sama dengan 10.
Namun, dalam kasus seperti ini:

class Data{
    int b = a;
    int a = 10;
};

a akan menjadi 10 dan b akan memiliki nilai sampah.
Ini karena saat mengevaluasi int b = a;. a tidak ditentukan.

3
Rokas Višinskas 19 September 2019, 15:26