如何获取 Allegro 中的错误原因?

How do I get the error reason in Allegro?

我来自 SDL,在那里我有一个名为 SDL_GetError() 的函数,它神奇地返回了一个带有内部错误的 const char *。这是我在 Allegro 5 上的一段代码:

#include "game.h"

ALLEGRO_BITMAP *load_bmp(const char *s) {
    ALLEGRO_BITMAP *bmp = nullptr;
    bmp = al_load_bitmap(s);
    if (!bmp) {

        al_show_native_message_box(display,
            "Fatal Error!",
            "Failed to load: " ,
            s,
            NULL,
            ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        return nullptr;

    }

    return bmp;
}

ALLEGRO_BITMAP *player = load_bmp("GFX\player_up.bmp"); 

文件没问题,我可以直接从 al_load_bitmap 加载,但是,由于我添加了我的个人功能,Allegro 崩溃并给我它的错误对话框(所以,bmp 必须是 nullptr)。问题是这个错误对我来说绝对没用,我需要知道 Allegro 内部发生了什么(所以,像 al_get_error() 这样的东西会很棒)。我怎么知道发生了什么?

是文件范围内的变量player;换句话说,它是否在您的 main 运行之前初始化并有机会初始化 allegro 库?

假设是这种情况,请尝试将行更改为

ALLEGRO_BITMAP *player = nullptr;

并在您在程序启动期间的适当时间调用的函数中对其进行初始化,例如:

void init_game_bitmaps()
{
   player = load_bmp("GFX\player_up.bmp");
   // Other initialisation here ...
}

这样称呼它:

// Somewhere in main, or an appropriate function call:
init_game_bitmaps();