C++和SDL 2-创建一个仅限常量的头:对常量::窗口的未定义引用
C++ and SDL 2 - Creating a constants-only header: undefined reference to Constants::window
所以我用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;
如果我的语法有点偏离的话,我很乐意被纠正。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?