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

C++开发文本冒险游戏时Location类型指针赋值报错问题求助

问题根因

你代码的核心错误是初始化顺序问题:C++代码按从上到下的顺序执行,你在构造FirstLevel实例时传入了&SecondLevel作为参数,但此时SecondLevel实例还没有被定义,对未完成初始化的变量取地址会直接触发编译错误。

修复方案

推荐你通过「先创建实例、再设置关联」的方式解决互相引用的初始化问题,操作步骤如下:

  1. 给Location类新增设置出口的成员函数,例如:void SetExit(int direction, Location* target),参数对应你构造函数里的四个出口位置即可
  2. 修改main函数代码如下:
#include "Player.h"
#include "Location.h"
#include "MainMenu.h"

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    // 先创建两个地点实例,暂时不填互相的关联指针
    Location FirstLevel(1, "Abandoned Farm", "FirstChallenge",
         nullptr, nullptr, nullptr, nullptr);
    Location SecondLevel(2, "SecondLevel", "SecondChallenge",
        nullptr, nullptr, nullptr, nullptr);
    
    // 两个实例都初始化完成后,再设置双向关联
    // 以下代码的参数对应你构造函数里的出口参数顺序:第四个为前进出口、第五个为后退出口
    FirstLevel.SetExit(3, &SecondLevel);
    SecondLevel.SetExit(4, &FirstLevel);

    Player player(&FirstLevel);
    MainMenu menu(&player);

    menu.MenuOptions();
    
    return 0;
}
其他注意事项
  • 原代码里存在拼写错误:Abondend应为Abandoned,Chalenge应为Challenge,建议修正避免后续文本展示出错
  • 后续如果要扩展更多地点,建议用std::vector或std::map统一存储所有Location实例,批量设置关联,避免反复出现初始化顺序问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:02