C++命名空间未声明

C++ Namespace is undeclared

本文关键字:未声明 命名空间 C++      更新时间:2023-10-16

我是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 中定义的变量中)。