C++和SDL 2-创建一个仅限常量的头:对常量::窗口的未定义引用

C++ and SDL 2 - Creating a constants-only header: undefined reference to Constants::window

本文关键字:常量 引用 未定义 窗口 一个 SDL 创建 C++      更新时间:2023-10-16

所以我用C++和SDL2开始了一个空闲时间的游戏项目,遇到了一个令人困惑的问题。

我有一个头文件,我打算在其中存储全局使用的数据。

class Constants {
public:
    static SDL_Window* window;
    const static int w = 640;
    const static int h = 480;
};

现在,当我在其他地方引用窗口时,会出现一个"未定义引用"错误。我试过在主函数之前添加一个null定义,但它仍然不起作用。

所以问题来了:

SDLManager::SDLManager() {
    // ......
    // THIS BREAKS
    Constants::window = SDL_CreateWindow("Caption", 
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 
        Constants::w, Constants::h, SDL_WINDOW_SHOWN);
}

出了什么问题,我该怎么办?我以前用SDL 1成功地编码过。

至少,您需要在头中转发声明SDL_Window类。

此外,如果以上是链接器错误,则需要让编译器知道链接到哪个库以及在哪里可以找到它。

我在自己的游戏开发过程中也遇到过类似的问题(尽管我使用了Allegro)

您需要做的是定义有问题的变量/类。你只声明了它。你现在需要定义它。

// constants.h
class Constants {
    public:
    static SDL_Window* window;
    const static int w = 640;
    const static int h = 480;
};
// constants.cpp
#include "constants.h"
Constants::SDL_Window *window;

如果我的语法有点偏离的话,我很乐意被纠正。