Проблема с заголовочными файлами и файлами C ++ - PullRequest
0 голосов
/ 03 сентября 2010

Я создаю физический движок с минимальным круговым кругом в статической библиотеке, и я столкнулся с проблемой.У меня есть файл заголовка для манипулирования объектами, одной из переменных является положение объектов.Переменная position объявлена ​​в bpObject.h, и у меня есть функция void SetPosition (), которая обращается к текущей позиции и устанавливает ее в соответствии с указанными параметрами (также объявленными в bpObject.h).Моя проблема в том, что в исходном файле мне нужно получить доступ к переменной позиции (приватной).Я не могу получить к нему доступ через класс bpObject, потому что, будучи классом, он не будет иметь правильного значения при использовании в качестве типа.Итак, как мне получить доступ к переменной позиции в классе?

Заранее спасибо,

Грег Трелавен

РЕДАКТИРОВАТЬ

Код для 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);
     }
}

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Я предполагаю, что вы на самом деле не хотите, чтобы все эти "статики" были там, это ваша первая проблема (в сущности, вы можете получить доступ только к одному объекту)

Как только вы избавитесь от них, вы можете реализовать SetPosition в вашем исходном файле следующим образом:

namespace bp {
    void Object::SetPosition(single X, single Y) {
        position[0] = X; //or however your bp::Vector is implemented
        position[1] = Y;
    }
}

Да, позиция закрыта, но когда вы на самом деле определяете метод, вы получаете доступ к членам. Это вообще то, что вы спрашиваете?

0 голосов
/ 03 сентября 2010

Вы задаете неправильный вопрос .Если, как вы говорите, переменная не имеет правильного значения, когда она необходима, то проблема не имеет ничего общего с методами доступа или public / private.

Как переменная должна получить правильное значение?Что-то должно вызывать setPosition, поэтому вы должны упорядочить вещи так, чтобы это произошло до того, как что-либо еще будет нуждаться в этом значении.

Как только вы получите это, ваши средства доступа (setPosition и getPosition) должно работать нормально (после того, как вы избавитесь от static, что не имеет смысла).

...