Первая ошибка: указатели и объекты
Вам необходимо вызывать myfunc с указателем на объект SLD_Event вместо вызова с самим объектом SLD_Event:
myfunc(&event);
Помещение &
перед объектом (или переменной) говорит компилятору, что вы хотите адрес памяти объекта (который является так называемым указателем на него).
Помещение *
перед указателем на объект сообщает компилятору, что вы хотите содержимое адреса памяти, на который указывает указатель (который является объектом или самой переменной)
Ошибка компилятора, которую вы получаете, говорит о том, что компиляторне может найти функцию с именем myfunc, которая принимает (ссылку на) объект SLD_Event.Это верно, поскольку (только) доступная функция myfunc требует указателя на объект SLD_Event в качестве аргумента.
Вторая ошибка: указатели на указатели
Второй (независимый от первого) компиляторполученная ошибка (error: cannot convert 'SDL_Event**' to 'SDL_Event*' for argument '1' to 'int SDL_PollEvent(SDL_Event*)'
) говорит о том, что тип переменной, введенной вами в функцию SLD_PollEvent
, несовместим с ожидаемым типом и не может быть автоматически преобразован.
Поскольку вы добавили &
доevent
переменная в этом вызове функции, вы в основном просите получить указатель на область памяти, которая указывает на объект события.Это совершенно допустимый код C, но не тот, который вы хотите, потому что функция SLD_EventPoll
ожидает указатель на объект события (который имеет тип SLD_Event *
).
Таким образом, чтобы решить вашу вторую ошибку, изменитестрока в:
while ( SDL_PollEvent(event) ) {
(обратите внимание на удаленное &
)
Третья ошибка: адресация переменных объекта в (указателях) на объекты
Третья ошибка в вашем кодеэто event.type
.Поскольку событие является указателем на объект SLD_Event
, C ++ ожидает ->
вместо .
(который используется для объектов, то есть SLD_Event
без *
).