C ++命名空间未声明

时间:2017-01-02 16:15:05

标签: c++

我是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分钟的课程,我更愿意在学习更多关于语言之后完全改写。现在,我已经创建了一个类并解决了所讨论的问题。我是初学者,欢迎任何书籍/资源推荐!

2 个答案:

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