“没有运算符'='匹配这些操作数”错误与Ogre :: Vector3

时间:2014-01-15 00:41:25

标签: vector ogre

我在我的一个派生类中初始化一个向量时遇到了问题。我正在使用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>

有谁知道我做错了什么?

1 个答案:

答案 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;