У меня проблема с инициализацией вектора в одном из моих производных классов. Я использую OGRE и хочу инициализировать позицию в производном классе под названием CMissile.Ошибка «operator operator = = соответствует этим операндам» с Ogre :: Vector3
CMissile наследует от CWeapon (который имеет одну чистую виртуальную функцию).
CWeapon.h:
#include "CPlayer.h"
class CWeapon
{
protected:
CPlayer& myOwner; //Reference to player
Ogre::Vector3 myPosition;
public:
CPlayer getOwner();
virtual void doBehaviour() = 0; //Do not add method body for this in CWeapon.cpp, pure virtual function
};
CMissile.h:
#include "CWeapon.h"
class CMissile : CWeapon
{
private:
float myDirection;
public:
CMissile(float, float, float, float, CPlayer&);
};
и здесь, в CMissile.cpp где моя ошибка находится:
#include "CMissile.h"
CMissile::CMissile(float x, float y, float z, float dir, CPlayer& player)
{
this->myOwner = player;
this->myDirection = dir;
this->myPosition = new Ogre::Vector3(x, y, z); //here is the error, which reads "No operator '=' matches these operands"
}
В CPlayer.h (включен в CWeapon) У меня есть линия:
#include <OgreVector3.h>
Кто-нибудь знает, что я делаю неправильно?
Может быть, потому что Ogre :: Vector3 myPosition; защищена? – Aidan
Также обратите внимание, что this-> myOwner = player; НЕ изменяет то, что относится к mOwner, но вместо этого перезаписывает все, что указывало (ничего!) с содержимым «player». Не знаю, почему вы не получаете ошибку компиляции, чтобы не инициализировать ее - вы это оставили? – ltjax