我在我的一个派生类中初始化一个向量时遇到了问题。我正在使用OGRE并且想要在名为CMissile的派生类中初始化一个位置。
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>
有谁知道我做错了什么?
答案 0 :(得分:4)
new Ogre::Vector3
将在堆上分配一个新的向量(产生一个Ogre::Vector3 *
,一个指向该向量的指针)。您正尝试将其分配到myPosition
,其类型为Ogre::Vector3
。这两种类型不兼容。
你可能根本不想在这里使用new
,而是:
this->myPosition = Ogre::Vector3(x, y, z);
(将临时向量分配给myPosition
)或直接通过以下方式更新位置:
this->myPosition.x = x;
this->myPosition.y = y;
this->myPosition.z = z;