我是C ++的新手,正在尝试学习OpenGL。但是,当我尝试编译我的程序时,我无法引用我已在头文件中创建的命名空间。代码如下:
engine.hpp:
#ifndef ENGINE_HPP
#define ENGINE_HPP
// ...
namespace render {
void Initialise();
namespace inits {
bool glfw_init = false,
glfw_window_init = false,
gl_init = false;
}
}
#endif
engine.cpp:
#include "engine.hpp"
// ...
namespace render {
void Initialise() {
if (glfwInit() == GLFW_FALSE)
inits::glfw_init = false;
}
}
0 我不确定为什么这不是编译。我在Windows 10(64位)上使用MinGW(GCC)。
我的编译器消息是:
error: 'inits' has not been declared
编辑:谢谢大家的建议。看起来虽然这是一个编译器侥幸(在我第一次编辑之后,因为其他人无法重现问题并且重新安装修复了问题),这是我的代码中更大的组织问题的症状。由于我只投入了大约15分钟的课程,我更愿意在学习更多关于语言之后完全改写。现在,我已经创建了一个类并解决了所讨论的问题。我是初学者,欢迎任何书籍/资源推荐!
答案 0 :(得分:1)
您正在使用嵌套的命名空间,因此应该是:
render::inits::glfw_init = false;
答案 1 :(得分:0)
您的代码不符合您的想法。
// file engine.hpp
namespace render {
void Initialise();
namespace inits {
bool glfw_init = false, // these variables will be emitted with
glfw_window_init = false, // every source file that
gl_init = false; // #include "engine.hpp"
}
}
会在链接/加载时导致错误("多个定义的符号")。为了避免这种情况,您可以声明变量extern
或使用函数来设置/获取状态(存储在engine.cpp
中定义的变量中)。