Получение ошибок при использовании ImGui с OpenGL - PullRequest
0 голосов
/ 22 июня 2019

У меня есть некоторый код, работающий в OpenGL, и теперь я хотел бы использовать ImGui для создания графического интерфейса для моего приложения.

Когда я пытался скопировать однострочный код ImGui в мой проект ImGui::CreateContext(); с помощьювключая некоторые из заголовочных файлов ImGui, он длился сотню ошибок (возможно, из-за ссылок).

Я работаю с Ubuntu 18 и использую Makefile для компиляции всего проекта

Некоторые из ошибок, которые я получил, включая imgui.h:

imgui/imgui.h:153:39: error: unknown type name ‘ImGuiInputTextCallbackData’; did you mean ‘ImGuiInputTextFlags’?
 typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data);
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
                                       ImGuiInputTextFlags
imgui/imgui.h:154:35: error: unknown type name ‘ImGuiSizeCallbackData’
 typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
                                   ^~~~~~~~~~~~~~~~~~~~~
imgui/imgui.h:179:5: error: expected specifier-qualifier-list before ‘ImVec2’
     ImVec2()  { x = y = 0.0f; }
     ^~~~~~
imgui/imgui.h:192:5: error: expected specifier-qualifier-list before ‘ImVec4’
     ImVec4()  { x = y = z = w = 0.0f; }
     ^~~~~~
imgui/imgui.h:204:1: error: unknown type name ‘namespace’; did you mean ‘isspace’?
 namespace ImGui
 ^~~~~~~~~
 isspace
imgui/imgui.h:205:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
 {
 ^
In file included from window.c:23:0:
imgui/imgui.h:1200:23: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘new’
 inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
                       ^~~
imgui/imgui.h:1201:23: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘delete’
 inline void  operator delete(void*, ImNewDummy, void*)   {} // This is only required so we can use the symmetrical new()
                       ^~~~~~
imgui/imgui.h:1206:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
 template<typename T> void IM_DELETE(T* p)   { if (p) { p->~T(); ImGui::MemFree(p); } }
         ^
imgui/imgui.h:1217:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
 template<typename T>
         ^
imgui/imgui.h:1280:5: error: unknown type name ‘ImVec2’
     ImVec2      WindowPadding;              // Padding within a window.

Когда я запускаю некоторые примеры, которые они предоставляют, они работают отлично.Однако при попытке объединить мой проект с одной строкой кода imgui он заканчивается ошибками, показанными выше.

1 Ответ

1 голос
/ 23 июня 2019

Глядя на то, какие ошибки вы получаете, мне кажется, что вы пытаетесь скомпилировать свою программу с помощью компилятора Си. Тем не менее, ImGui написан на C ++.

Например,

imgui/imgui.h:204:1: error: unknown type name ‘namespace’; did you mean ‘isspace’?
 namespace ImGui
 ^~~~~~~~~

namespace является зарезервированным ключевым словом C ++, и ваш компилятор, похоже, не распознает его как таковое.

Поскольку вы упомянули, что используете MakeFile, попробуйте найти в этом файле, какой компилятор вы используете. Если написано gcc, замените его на g ++. Если используется clang, замените его на clang ++.

...