我在静态库中创建了一个最小的圆圈物理引擎,我遇到了一个问题。我有一个用于对象操作的头文件,其中一个变量是对象的位置。位置变量在bpObject.h中声明,我有一个void函数SetPosition(),它访问当前位置并将其设置为指定的参数(也在bpObject.h中声明)。我的问题是在源文件中,我需要访问位置变量(私有)。我无法通过bpObject类访问它,因为作为一个类,当它用作类型时,它将没有正确的值。那么,我如何访问类中的位置变量?
提前致谢,
Greg Treleaven
bpObject.h的代码
#include "bpMath.h"
namespace bp
{
class Object
{
private:
static bp::Vector position;
static bp::Vector velocity;
static bp::Vector acceleration;
public:
static single restitution;
static single radius;
static void setPosition(single X, single Y);
static bp::Vector getPosition();
static void applyPosition(single X, single Y);
static void setVelocity(single X, single Y);
static bp::Vector getVelocity();
static void applyVelocity(single X, single Y);
static void setAcceleration(single X, single Y);
static bp::Vector getAcceleration();
static void applyAcceleration(single X, single Y);
}
}
答案 0 :(得分:3)
我猜你实际上并不想要那些'静态',这是你的第一个问题(因为它的立场,你几乎只能访问一个对象)
一旦摆脱了这些,您可以通过以下方式在源文件中实现SetPosition:
namespace bp {
void Object::SetPosition(single X, single Y) {
position[0] = X; //or however your bp::Vector is implemented
position[1] = Y;
}
}
是的,位置是私有的,但是当您实际定义方法时,您可以访问成员。这就是你要问的问题吗?
答案 1 :(得分:0)
你问错误的问题。如果,如您所说,变量在需要时没有正确的值,则问题与访问方法或公共/私有无关。
该变量应如何获得其正确的值?有些东西必须调用setPosition
,所以你必须安排一些事情,以便在之前发生 其他任何需要该值的事情。
一旦你拥有了它,你的访问者(setPosition
和getPosition
)应该可以正常工作(在你摆脱static
之后,这是没有意义的。)