2013-12-07 7 views
0

Я делаю маленькую игру для микроплана. Это арканоидная игра. Я пытаюсь реализовать функцию обратного вызова следующим образом:подстрочное значение не является ни массивом, ни указателем, ни вектором

typedef void (*TPFN_BEHAVIOUR)(int block_number); 

typedef struct 
    { 
     int square_number; 
     int initial_x; 
     int initial_y; 
     int final_x; 
     int final_y; 
     TPFN_BEHAVIOUR behaviour; 
}Square; 

Square block[150]; 

Тогда я:

block[i].behaviour = app_DetectCollision_SendLife; 

где app_Detect_Collision_SendLife является

void app_DetectCollision_SendLife(int i){ 

    int initial_x = block[i].final_x - block[i].initial_x - 5; 
    int initial_y = block[i].final_y; 
    services_Screen_Draw(heart, initial_x, initial_y, 10, 9); 
} 

Я получаю сообщение об ошибке, показанное в заголовке в следующей строке:

block[special_block].behaviour = app_DetectCollision_SendLife; 
+0

вы могли бы разместить весь код. [что такое 'special_block'?] – amdixon

+0

Где в коде' app_DetectCollision_SendLife'declared? Это перед строкой 'block [special_block] .behaviour = app_DetectCollision_SendLife;'? – this

+0

Это просто целое число. Способ перебора массива структуры. Я не могу опубликовать весь код, потому что он очень длинный. Просто спроси меня, что тебе нужно, и я объясню тебе. – Aldridge1991

ответ

0

Скомпилирует мою систему. Должно быть blocks не известно, когда вы его используете. Если он находится в другом файле, используйте extern, чтобы компилятор знал об этом.

В файле C, где определяется блоки:

Square block[150]; 

В файле C, где блоки используют (или в файле заголовка):

extern Square block[150]; 
+1

Блок определяется как extern во всех необходимых файлах. Ошибка, похоже, связана с указателями:/ – Aldridge1991

+1

Это ошибка, которую я получил, когда блок не был определен. Попробуйте вызвать sizeof (block) и посмотреть, что произойдет. Также попробуйте дать этому массиву более уникальное имя, оно может столкнуться с чем-то. – egur

1

Одна возможность состоит в том, что сфера, где блок [special_block ] .behaviour = app_DetectCollision_SendLife; имеет неверное объявление блока, которое не является массивом. Убедитесь, что это не что-то вроде квадратного блока;

БЛАГОДАРЯ

Марк Плотник

Смежные вопросы

 Смежные вопросы