来自未命名命名空间的取消引用指针不起作用

Dereference pointer from unnamed namespace not working

对于我正在开发的 Wii 自制游戏引擎,我有这个(缩短的)脚本来处理打印文本:

#include <grrlib.h>

#include "graphics.hpp"

#include "Vera_ttf.h"

namespace {
    GRRLIB_ttfFont *font = GRRLIB_LoadTTF(Vera_ttf, Vera_ttf_size);
}

namespace graphics {
namespace module {

void print(const char *str, int x, int y) {
    GRRLIB_PrintfTTF(x, y, font, str, 12, 0xFFFFFFFF);
}

} // module
} // graphics

此代码可以编译,但是,当尝试调用上面的 print 函数时,没有呈现任何内容。奇怪的是,删除未命名的命名空间并将 print 函数更改为:

void print(const char *str, int x, int y) {
    static GRRLIB_ttfFont *font = GRRLIB_LoadTTF(Vera_ttf, Vera_ttf_size);

    GRRLIB_PrintfTTF(x, y, font, str, 12, 0xFFFFFFFF);
}

工作正常。但是,我希望字体变量可以通过另一个 setFont 函数进行更改。我怎样才能做到这一点?

这里是GRRLIB_PrintfTTF函数代码,如果有人需要的话:https://github.com/GRRLIB/GRRLIB/blob/master/GRRLIB/GRRLIB/GRRLIB_ttf.c

由于你必须用GRRLIB_Init()初始化库,你可以提供一个类似的init函数来确保你的变量在库之后被初始化。

#include <grrlib.h>

#include "graphics.hpp"

#include "Vera_ttf.h"

namespace {
    GRRLIB_ttfFont *font = NULL;
}

namespace graphics {
    void InitGraphics() {
        font = GRRLIB_LoadTTF(Vera_ttf, Vera_ttf_size);
    }

namespace module {

void print(const char *str, int x, int y) {
    GRRLIB_PrintfTTF(x, y, font, str, 12, 0xFFFFFFFF);
}

} // module
} // graphics

在调用 GRRLIB_Init()

之后调用 graphics::InitGraphics()