Я следую учебным пособиям по программированию игр Allegro от fixbyproximity.com, я дошел до уроков, ориентированных на объекты, но у меня проблема с cdecl, который используется как TakeLife, так и ScorePoint. По сути, это исправляет ошибку, связанную с созданием функции в строке, где вызывается функция.
Комментирование функции приводит к компиляции программы, но дает мне эти ошибки
warning: ‘cdecl’ attribute directive ignored [-Wattributes]
warning: ‘cdecl’ attribute directive ignored [-Wattributes]
Вероятно, здесь будут собраны некоторые отрицательные отзывы, поскольку здесь будут некоторые фрагменты кода, извините, но остальная часть моего кода работает, и я не хочу путать / путать вещи, публикуя огромное количество кода из разных разделов программы. Я бы предпочел сосредоточиться на том, что я считаю неправильным, и выяснить, как это исправить.
//Prototype Definition
void TakeLife() __attribute__((cdecl)); <-- these are ignored
void ScorePoint() __attribute__((cdecl)); <-- these are ignored
// Rest of Program
[...]
void TakeLife() //__attribute__((cdecl)) <-- original code, caused exception
{
ship->loseLife();
}
void ScorePoint() //__attribute__((cdecl)) <-- original code, caused exception
{
ship->addPoint();
}
Из того, что я узнал, cdecl является более гибкой альтернативой stdcall, поэтому я предполагаю, что, поскольку cdecl игнорируется, мой компилятор по умолчанию использует stdcall, и поэтому вызов функции завершается неудачно. Я просмотрел учебники, скачал пример кода и сравнил, и я знаю, что все правильно в моем коде, но эти строки почему-то игнорируются.
Задача ещё не решена.
Других решений пока нет …