sccz80:"../lib/main.c" L:16 Предупреждение:#14: Ожидается ',' sccz80:"../lib/main.c" L:16 Ошибка:#28: Ошибка сегментации

При компиляции кода ниже появляется следующая ошибка:

sccz80:"../lib/main.c" L:16 Warning:#14:Expected ','
sccz80:"../lib/main.c" L:16 Error:#28:Segmentation fault
/*
 * A test game of Pong using the Z88dk
 */

#include <spectrum.h>
#include <graphics.h>
#include <sprites/sp1.h>
#include <stdio.h>

struct Bat {
    int x;
    int y;
    int w;
    int h;
};

void clear_screen(Bat* bat)
{
    undrawb(bat.x, bat.y, bat.w, bat.h);
}

int main()
{
    struct Bat bat;
    bat.x = 0;
    bat.y = 0;
    bat.w = 8;
    bat.h = 24;

    while(1)
    {
        zx_border(INK_GREEN);
        clear_screen(&bat);
        drawb(bat.x, bat.y, bat.w, bat.h);
    }
    return 0;
}

Есть предложения по поводу того, в чем может быть проблема? Я использую z88dk для создания тестовой программы ZX Spectrum. К сожалению, у меня недостаточно очков, чтобы добавить тег z88dk. Приносим извинения за это.

1 ответ

Решение

У вас в программе 2 ошибки:

void clear_screen(Bat* bat)
{
    undrawb(bat.x, bat.y, bat.w, bat.h);
}

Нет типа Batопределено в вашем коде. Толькоstruct Bat. потомbatимеет тип "указатель на структуру". Это означает, что вы не можете получить доступ к членам структуры, используя. оператор, но вам нужно разыменовать через ->.

Действительно странно, что ваш компилятор выдает сообщение об ошибке, которое не содержит ни одной из этих ошибок, а вместо этого упоминает строку (при условии, что L:16 указывает строку 16) и некоторые причины, не соответствующие коду.

Другие вопросы по тегам