我已经用 C++20 模块设置了我的应用程序的基础。我遇到的问题是,在我的一个函数中,当我调试断点时,断点没有按预期工作。
入口点在这里,在
main.cpp
:
int main()
{
Teragon::WindowResizeEvent e(1280, 1024);
std::cout << e << std::endl;
std::cin.get();
return 0;
}
我在
main()
的第一行有一个断点,它被击中了。我可以成功地进入下一行并确认我的“WindowResizeEvent”对象已正确构造。然后我进入 << operator overload (to send the event to the output stream). 的方法
这个方法在一个C++20模块接口分区(
EventDispatcher.cppm
)中,叫做Teragon.Events:EventDispatcher
:
export std::ostream& operator<<(std::ostream& os, const Teragon::Event& e)
{
return os << e.ToString();
}
此方法中的断点被击中并按预期正常工作。但是,如果我随后进入
e.ToString()
方法(这是对基 Event
类中方法的重写,我就会遇到问题。基类方法定义如下:
virtual std::string ToString() const { return GetName(); }
同一个
WindowResizeEvent
模块的ApplicationEvents
分区中的Teragon.Events
类重写这个方法是这样的:
virtual std::string ToString() const override
{
std::stringstream ss;
ss << "WindowResizeEvent: " << m_Width << ", " << m_Height;
return ss.str();
}
如果我在这个覆盖的第一行有一个断点,调试器永远不会命中它。
stringstream
构造函数永远不会执行,Visual Studio 告诉我不会命中断点:
知道为什么吗?
解决方案编译,但有时我会收到此警告:
如果我重新编译,警告通常会消失,此时我没有任何错误、警告或消息。
这是我确认的内容:
这是我在项目属性中的 C/C++ 选项:
和我在同一项目中的链接器选项: