C++开发文本冒险游戏时Location类型指针赋值报错问题求助
问题根因
你代码的核心错误是初始化顺序问题:C++代码按从上到下的顺序执行,你在构造FirstLevel实例时传入了&SecondLevel作为参数,但此时SecondLevel实例还没有被定义,对未完成初始化的变量取地址会直接触发编译错误。
修复方案
推荐你通过「先创建实例、再设置关联」的方式解决互相引用的初始化问题,操作步骤如下:
- 给
Location类新增设置出口的成员函数,例如:void SetExit(int direction, Location* target),参数对应你构造函数里的四个出口位置即可 - 修改
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
相关产品推荐
相关产品推荐

