Я работаю с PhysX в C ++ и получаю сообщение об ошибке,cannot instantiate abstract class
в следующем коде:
std::vector < PxJoint* > joints;
PxD6Joint* j = PxD6JointCreate(*gPhysics, a0, t0, a1, t1);
joints.push_back (j);
(PxD6Joint)(joints[0])->setDrivePosition(PxTransform()); //error here
Код является лишь примером. PxD6joint — это абстрактный класс, который наследуется от PxJoint. Я считаю, что должен быть какой-то способ доступа к публичным членам &j
с помощью joints[0]
, но, если есть, я не делаю это правильно.
Как сказал Joachim, вы пытаетесь привести результат setDrivePosition к типу PxD6Joint, что неверно (тем более что метод не возвращает ничего. Я полагаю, вы пытаетесь каким-то образом привести объект, на который указывают суставы [0], к PxD6Joint Тип, который бесполезен, он уже имеет правильный класс.
Но этот класс чистый абстрактный класс: некоторые методы не реализованы (setDrivePosition (const PxTransform &поза) = 0). Вам нужно использовать объект подкласса PxD6Joint со всеми реализованными методами.