无法通过继承读取内存

时间:2019-03-24 14:25:25

标签: c++

我无法在继承类中保存和加载数据。

在加载代码时,功能调试器说无法读取内存并且无法访问成员函数

对象是超类,CPlayer是子类

CMainGame::CMainGame()
    :player(nullptr),field(nullptr), save_load(nullptr)
{
    field = new CField();
    save_load = new CSave_Load;

}
void CMainGame::select_class()
{
    case 4:
      //player = new CPlayer;
      player = new CPlayer("", 0.f, 0.f, 0, 0, 0);
      save_load->Load(player);
      return;
}

save_load标头和cpp

class CSave_Load
{
public:
    CSave_Load();
    ~CSave_Load();

    void Save(class CObject* _player);
    void Load(class CObject* _player);
};
//Load Function

void CSave_Load::Load(CObject* _player)
{
FILE* fp = nullptr;
   errno_t err = fopen_s(&fp, "./Data/Save.txt", "rb");
   if (err == 0)
   {
    fread(_player, sizeof(CObject), 1, fp);
    cout << "불러오기 성공" << endl;
    fclose(fp);
   }
    else
      cout << "불러오기 실패" << endl;
      system("pause");
}

2 个答案:

答案 0 :(得分:0)

您正在使用VisualStudio吗?

由于Visual Studio是从源代码构建的,因此运行EXE的目录可能不是源代码目录。

完整路径会发生什么?该代码似乎“确定”,但是如果不查看完整图片,很难猜测。

答案 1 :(得分:0)

最后,我通过在保存,加载功能中发送参数的结构来解决此问题 编译器不知道CObject或CPlayer的大小,因为它们太重了

INFO* CSave_Load::Load(INFO* _info)
{
FILE* fp = nullptr;
   errno_t err = fopen_s(&fp, "./Data/Save.txt", "rb");
   if (err == 0)
   {
    fread(_info, sizeof(INFO), 1, fp);
    cout << "불러오기 성공" << endl;
    fclose(fp);
   }
    else
      cout << "불러오기 실패" << endl;
      system("pause");
    return _info;
}

INFO是CObject类中的结构