前提是:我在做一个粒子系统。我有一个 ParticleManager,它有一个 ParticleSystem 对象的 vector ,它有一个 Particle 类型的 vector 。但是,我也有继承自 Particle 的 Snowball 类,它有自己的 ParticleSystem,因为它会留下粒子轨迹。
#pragma once
#include "ParticleSystem.h"
class Snowball : public Particle
{
private:
ParticleSystem ps;
public:
Snowball(){};
Snowball(Point2D pos, RECT* viewport);
void Update();
void Draw(GraphicsM * pGraphicsModule);
};
这是 Snowball.h 文件,而 ParticleSystem 文件的顶部只有 #include "Snowball.h",并且始终使用 Snowball,因为任何给定的 Particle 都可以是 Snowball。如何通过更改架构或代码顺序来解决此问题?
最佳答案
一个选项:不是给 Snowball 一个 ParticleSystem 类型的成员,而是给它一个指向 ParticleSystem 的指针(最好是 shared_ptr 或 unique_ptr 以防止内存泄漏)。那么你不需要在 Snowball.h 中#include ParticleSystem.h;你只需要转发声明它。然后,Snowball 的构造函数需要移动到 .cpp 文件并在那里实例化一个新的 ParticleSystem 以存储在指针中。
类似于:
// Snowball.h
class ParticleSystem;
class Snowball
{
private:
std::shared_ptr<ParticleSystem> ps;
public:
Snowball();
// rest the same
};
// Snowball.cpp
#include "Snowball.h"
#include "ParticleSystem.h"
SnowBall::SnowBall()
: ps(std::make_shared<ParticleSystem>())
{
}
// rest the same except for ps. becoming ps->
关于c++ - 解决循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253014/