将 ImGui 与 OpenGL 一起使用时出现错误
Getting errors when using ImGui with OpenGL
我有一些代码在 OpenGL 中工作,现在我想使用 ImGui 为我的应用程序制作一个 GUI。
当我试图通过包含 ImGui
的一些头文件将 ImGui 的一行代码复制到我的项目 ImGui::CreateContext();
时,它持续了一百个错误(可能是由于链接) .
我正在使用 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 的一行代码合并时,它最终会出现如上所示的错误。
看看你得到的错误类型,在我看来你正在尝试用 C 编译器编译你的程序。然而,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++。
我有一些代码在 OpenGL 中工作,现在我想使用 ImGui 为我的应用程序制作一个 GUI。
当我试图通过包含 ImGui
的一些头文件将 ImGui 的一行代码复制到我的项目 ImGui::CreateContext();
时,它持续了一百个错误(可能是由于链接) .
我正在使用 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 的一行代码合并时,它最终会出现如上所示的错误。
看看你得到的错误类型,在我看来你正在尝试用 C 编译器编译你的程序。然而,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++。