You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯C++实例化对象时构造函数日志未打印但初始化生效问题

问题根因

你看不到Dungeon构造的日志是因为日志输出后被后续的清屏操作直接清除了,实际执行顺序如下:

  1. 全局Game game对象开始初始化,优先执行类内成员currentDungeon的构造逻辑:
    • 打印LOG: Dungeon Constructor
    • 读取文件填充rawLevelText
    • 调用Debug_PrintRaw打印LOG: Dungeon PrintRaw Called.和文件内容
  2. currentDungeon构造完成后,进入Game类的构造函数,第一行调用ShowSplashScreen()
  3. ShowSplashScreen()第一行调用ClearScreen(),内部的system("cls")直接把之前所有输出的日志全部清空,之后才打印启动页内容,因此你完全看不到之前输出的日志。

验证方案

临时注释掉ClearScreen()函数里的system("cls");代码,重新编译运行即可看到所有预期日志。

代码优化建议

  • 尽量不要用全局对象实例化复杂类,多编译单元场景下全局对象的初始化顺序存在不可预测的问题,建议把Game game的定义放到main函数内部。
  • 复杂类型的初始化建议放到构造函数的初始化列表中,逻辑更清晰,示例修改如下:
// Game.h修改
Dungeon currentDungeon; // 移除类内默认初始化

// Game.cpp构造函数修改
Game::Game() : currentDungeon("Dungeons/dungeon1.txt")
{
    ShowSplashScreen();
    currentDungeon.Debug_PrintRaw();
}
  • 调试日志如果不想被清屏影响,可以考虑输出到独立日志文件,或者在清屏前调用std::cout.flush()保证输出完成。

内容的提问来源于stack exchange,提问作者I_Keep_Trying

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:30:00