Я новичок в C++ и пытаюсь изучить OpenGL. Однако, когда я пытаюсь скомпилировать свою программу, я не могу ссылаться на пространство имен, которое я уже создал в своем заголовочном файле. Код выглядит следующим образом:Пространство имен C++ не объявлено
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;
}
}
O Я не знаю, почему это не компиляции. Я использую MinGW (GCC) в Windows 10 (64-разрядный).
Мое сообщение Компилятор:
error: 'inits' has not been declared
Edit: Спасибо всем за ваши предложения. Похоже, что хотя это была неудача компилятора (после моего первого редактирования, поскольку другие не смогли воспроизвести проблему и переустановить исправленную проблему), это является симптомом более сложной организационной проблемы в моем коде. Поскольку я только инвестировал ~ 15 минут в программу, я бы предпочел полностью переписать это, узнав больше о языке. На данный момент я создал класс и решил обсуждаемый вопрос. Я новичок, и любые рекомендации по книге/ресурсам будут приветствоваться!
Знаете ли вы, что ваш код сделает какой-либо блок компиляции (исходный файл), который '#include" engine.hpp "испускает другой' render :: inits :: glfw_init' (и, следовательно, вызывает ошибки при компоновке/загрузке)? Все это пахнет как очень бедный (попытка) C++. В C++ данные/методы, такие как 'init' или' Initialise() ', как правило, не нужны и заменяются конструкторами. – Walter
Не удалось воспроизвести: http://coliru.stacked-crooked.com/a/37fd43340f5a8ba5 Создайте [mcve]. – user2079303
Принимая во внимание, ваши изменения: невозможно воспроизвести. Вы компилируете свой код с помощью G ++? –