0

首先,我知道什么是未解决的外部错误,因此我在这里询问为什么来自 ImGui 的文件没有将其声明的函数链接到 cpp 中这些函数的定义。我不应该接触的两个文件没有链接,我得到外部错误

我正在使用没有 openGL 实现的 SDL2 开发引擎。这是一个不会使用图形的应用程序,我只需要 SDL2 来打开一个窗口,我将在其中使用 ImGUI 和其他。

因此,当我尝试将 ImGui 包含到我的 sln 中时,问题就开始了。

我有:

DocA.cpp

在本文档中,我在 DOC_MAIN.cpp 中调用了不同的函数。此函数遵循一般应用程序模式:Init()、Start() PreUpdate() Update() postUpdate() clean()。

在 SDL2 ImGui 示例之后,我开始在这些不同的函数中添加代码,以便在不同的阶段执行它。就在我确定我在创建 sdl2 窗口时没有任何问题时遵循了示例,我开始为 ImGui 编写初始化代码。示例中显示了这两个函数:

// Setup Platform/Renderer backends
ImGui_ImplSDL2_InitForOpenGL(App->window->window,App->window->gl_context);
ImGui_ImplOpenGL2_Init();

为了使用这两个功能,在我的文档顶部包含 Imgui.h 是不够的。实际上,实施了 ImGui 的示例文档正在使用它,包括:

#include "imgui.h"
#include "imgui_impl_sdl.h"
#include "imgui_impl_opengl2.h"

这两个包含对于使用上面显示的这两个功能很重要。文档的漏洞代码如下所示:

#include "ModuleImGui.h"
#include "..\imgui-1.83\imgui.h"
#include "..\imgui-1.83\backends\imgui_impl_opengl2.h"
#include "..\imgui-1.83\backends\imgui_impl_sdl.h"
#include <SDL.h>
#include <SDL_opengl.h>
#include "App.h"


bool ModuleImGui::Init() {

bool ret = true;
printf("ModuleImGui Init()\n");

// Setup Dear ImGui context
IMGUI_CHECKVERSION();
ImGui::CreateContext();//1


ImGuiIO& io = ImGui::GetIO(); (void)io;
//io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls
//io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;      // Enable Gamepad Controls

// Setup Dear ImGui style
ImGui::StyleColorsDark();
////ImGui::StyleColorsClassic();

// Setup Platform/Renderer backends
ImGui_ImplSDL2_InitForOpenGL(App->window->window,App->window->gl_context);
ImGui_ImplOpenGL2_Init();



return ret;

}

外部错误图像

这两个函数给了我外部错误。我这样做是为了解决它:

检查是否在不同的文档中多次添加了像 ImGui 这样的标题,这可能会导致外部错误。

将所有 ImGui 文档添加到我的解决方案中,包括这两个给我错误的函数的标题和 cpp。

从我的解决方案中删除了所有 ImGui 文档,只包含绝对路径...

4

0 回答 0