如何在 C++ 模块中使用全局变量?

How to use global variable in C++ module?

提问人:Stellarist 提问时间:11/15/2023 最后编辑:Mark RotteveelStellarist 更新时间:11/18/2023 访问量:151

问:

当我在 C++20 项目中使用模块时,如果我有

// Camera.hpp
extern const unsigned int SCR_WIDTH;
extern const unsigned int SCR_HEIGHT;

在主.cpp中

const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

但是现在我使用模块,

// Camera.cppm
module;

#include <glad/glad.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>

export module Camera;

// extern const unsigned int SCR_WIDTH;
// extern const unsigned int SCR_HEIGHT;

链接器似乎找不到变量,那么我应该如何修改它呢?

ld.lld: error: undefined symbol: SCR_HEIGHT@Camera
>>> referenced by CMakeFiles/triangle.dir/src/triangle2.cpp.obj:(.refptr._ZW6Camera10SCR_HEIGHT)

ld.lld: error: undefined symbol: SCR_WIDTH@Camera
>>> referenced by CMakeFiles/triangle.dir/src/triangle2.cpp.obj:(.refptr._ZW6Camera9SCR_WIDTH)
c ++20 c ++模块

评论

2赞 Aconcagua 11/15/2023
顺便说一句:无论如何,从操作系统中动态检索屏幕尺寸对我来说似乎更合适。对你来说不可行?
0赞 Yunnosch 11/15/2023
“它无法编译”有哪些症状?
1赞 Swift - Friday Pie 11/15/2023
const对于文件作用域中的变量,意味着 。虽然你可以用通常的标题来欺骗它,但它不在模块的功能范围之内。在模块中声明的 THings 应该在模块中定义。static
1赞 BoP 11/15/2023
3. 只是声明这个源包含一个模块。它必须出现在其他所有内容之前,以便编译器知道。4. 模块、命名空间和类都可以具有相同的名称。如果它看起来令人困惑,那么只需使用不同的名称。这取决于你。module;
2赞 Davis Herring 11/15/2023
@Swift-FridayPie:隐式是 C++17 之前的黑客攻击,在模块中是荒谬的,并且已被删除static

答: 暂无答案