Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环问题:从其自己的成员函数中访问对象集_C++ - Fatal编程技术网

C++ 循环问题:从其自己的成员函数中访问对象集

C++ 循环问题:从其自己的成员函数中访问对象集,c++,C++,我正在模拟一组相互作用的球体。 出于这个原因,我创建了一个类sphere,它存储其位置x-y-z,并有一个更新其位置的方法update() class cSphere { double x; double y; double z; void update() } 但是,此更新功能取决于其他球体的位置。我不知道如何最好地处理这个循环问题 我首先尝试的是在main()中创建一个std::vector*vec_spheres作为全局变量,并通过在cSphere.h中定义extern std::vec

我正在模拟一组相互作用的球体。 出于这个原因,我创建了一个类sphere,它存储其位置x-y-z,并有一个更新其位置的方法update()

class cSphere {
double x; double y; double z;
void update()
}
但是,此更新功能取决于其他球体的位置。我不知道如何最好地处理这个循环问题

我首先尝试的是在main()中创建一个std::vector*vec_spheres作为全局变量,并通过在cSphere.h中定义extern std::vector*vec_spheres在update()中访问它。但这当然不起作用

我现在正在考虑创建一个单例类,它返回一个指向*vec_spheres的指针,但这看起来也很粗糙


谢谢你的建议

根据德米特法,我不建议将这些知识作为
cSphere::update
的责任

相反,制作一个更高的实体(
cSphereSimulation
PhysicsEngine
,…?),它知道如何计算所有球体的新位置

在伪代码中:

struct cSimulation
{
    std::vector<cSpheres> _spheres;

    void update()
    {
          // calculations using all positions...
          for (auto& sphere : _spheres)
               sphere.update(newLocation);
    }
    // ...
struct-cSimulation
{
std::矢量球;
无效更新()
{
//使用所有位置进行计算。。。
对于(自动球体:_球体)(&U球体)
sphere.update(新位置);
}
// ...

开始尝试向函数传递一个包含所有其他球体的向量-
void update(const std::vector&otherSpheres);
。我不建议使用单例,因为它隐藏了
cSphere
对球体列表的依赖关系。