C++命名空间未声明
C++ Namespace is undeclared
我是C++新手,正在尝试学习OpenGL。但是,当我尝试编译我的程序时,我无法引用我已经在头文件中创建的命名空间。代码如下:
引擎.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
发动机.cpp:
#include "engine.hpp"
// ...
namespace render {
void Initialise() {
if (glfwInit() == GLFW_FALSE)
inits::glfw_init = false;
}
}
O我不确定为什么这没有编译。我在Windows 10(64位)上使用MinGW(GCC)。
我的编译器消息是:
error: 'inits' has not been declared
编辑:谢谢大家的建议。看起来,尽管这是编译器的侥幸(在我第一次编辑之后,因为其他人无法重现该问题并且重新安装解决了该问题),但这是我代码中更大的组织问题的症状。由于我只在程序中投入了~15分钟,因此我宁愿在了解有关该语言的更多信息后完全重写它。现在,我已经创建了一个类并解决了所讨论的问题。我是初学者,欢迎任何书籍/资源推荐!
您使用的是嵌套命名空间,因此应该:
render::inits::glfw_init = false;
你的代码并没有你认为的那样。
// 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
中定义的变量中)。
相关文章:
- C++未定义的命名空间
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 在命名空间 c++ 中正确声明 extern 变量
- 有没有办法转发声明命名空间或只是提前使其可见
- 为什么我应该使用extern关键字来声明命名空间范围中的变量
- C++命名空间未声明
- G++显示关于未定义命名空间的错误
- Foreward 声明在未命名命名空间中定义的类
- 在未命名的命名空间中声明变量
- 如何正确声明命名空间函数
- 如何转发声明命名空间中的类
- 在目标 C 中向前声明命名空间的C++类
- 在命名空间中的另一个函数内部正向声明命名空间中的一个函数
- Xcode 标头错误 - 命名空间'_STL'未包含命名空间'_Rep'
- 未命名的命名空间与全局声明
- 是否可以转发声明命名空间内的 typedef
- 如何转发声明未命名命名空间中的类
- 为什么在未命名的命名空间中声明变量后无法在全局范围内定义变量?
- "using"命名空间和声明命名空间有什么区别?
- 在实现匿名命名空间中声明的函数时,未定义的引用链接器错误