当 运行 gui.get<typename>("") 在 TGUI 中使用 sfml 后端时读取访问冲突

Read Access violation when running gui.get<typename>("") with sfml backend in TGUI

我目前正在尝试使用带有 SFML 作为后端的 TGUI,当我有这段代码时一切正常

#include <iostream>
#include <TGUI/TGUI.hpp>
int main() {
    sf::RenderWindow window{ {800, 600}, "TGUI window with SFML" };
    tgui::GuiSFML gui{ window };
    gui.loadWidgetsFromFile("menus/startMenu.txt");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            gui.handleEvent(event);
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }
        

        window.clear();
        gui.draw();
        window.display();
    }
}

但是,我随后尝试添加一行来引用从 tgui::Button::Ptr aButton = gui.get<tgui::Button>("a"); 加载的按钮。

#include <iostream>
#include <TGUI/TGUI.hpp>
int main() {
    sf::RenderWindow window{ {800, 600}, "TGUI window with SFML" };
    tgui::GuiSFML gui{ window };
    gui.loadWidgetsFromFile("menus/startMenu.txt");
    tgui::Button::Ptr aButton = gui.get<tgui::Button>("a"); // right here
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            gui.handleEvent(event);
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }
        

        window.clear();
        gui.draw();
        window.display();
    }
}

它给了我这个错误

Exception thrown at 0x7956271B (tgui.dll) in maze 2.exe: 0xC0000005: Access violation reading location 0x000003E4

我目前正在动态链接 tgui 和 sfml,在 Visual Studio c++ 上使用 TGUI-0.9 和 SFML-2.5.1 以及 Debug x86。

错误还告诉我它来自

        template <class T>
        typename T::Ptr get(const String& widgetName) const
        {
            return std::dynamic_pointer_cast<T>(get(widgetName));
        }

在 TGUI 中 Container.hpp。 我认为问题是 dynamic_pointer_cast 引发错误,但我不知道如何解决。我也不明白为什么除了 gui.get<typename>("sometext"); 函数之外其他所有东西都有效。有帮助吗?

编辑 1:我已经使用 gui.get() 进行了测试,效果非常好。这意味着问题肯定出在 dynamic_pointer_cast,因为 gui.get<typename>() 只是调用 gui.get() 并在其上运行 dynamic_pointer_cast

好的,所以我只需要重新启动 Visual studio,它现在可以正常工作了