【发布时间】:2022-01-01 16:42:49
【问题描述】:
我想使用一个类:class2,在一个类中:class1。根据我的阅读,为了防止循环依赖,必须在 class1.h 中转发声明 class2 并将其作为指针。在我的 class1.cpp 文件中从 class2 调用函数后。如果没有“无法读取内存”或 nullptr,我无法调用 class2 中的变量。
这是我的代码,谢谢你的帮助:
//main.cpp
#include "Login.h"
#include <iostream>
using namespace std;
int main() {
Login login;
login.StartMenu();
cout << "ENDING" << endl;
system("pause");
return 0;
}
//Login.h (Class1)
#pragma once
#include <iostream>
using namespace std;
class GameManager;
class Login {
public:
void StartMenu();
private:
GameManager* manager;
};
//登录.cpp
#include "Login.h"
#include "GameManager.h"
void Login::StartMenu() {
manager->GameStart();
}
//GameManager.h (Class2)
#pragma once
class GameManager {
public:
void GameStart();
private:
int level = 1;
};
//GameManager.cpp
#include "Login.h"
#include "GameManager.h"
void GameManager::GameStart() {
cout << level;
}
【问题讨论】:
-
你没有在
Login中初始化manager。 -
你在哪里初始化
manager? -
to prevent a circular dependency你说的是哪个循环依赖?GameManager不使用Login。 -
另外,你在各个地方都有奇怪的包含“GameManager.h”和“Login.h”,只包含正在使用它的标题。
-
另外,你的设计很奇怪。理想情况下,GameManager 内部应该有一个 Login。
标签: c++ pointers initialization forward-declaration