2014-01-15 3 views
0

У меня проблема с инициализацией вектора в одном из моих производных классов. Я использую 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> 

Кто-нибудь знает, что я делаю неправильно?

+0

Может быть, потому что Ogre :: Vector3 myPosition; защищена? – Aidan

+0

Также обратите внимание, что this-> myOwner = player; НЕ изменяет то, что относится к mOwner, но вместо этого перезаписывает все, что указывало (ничего!) с содержимым «player». Не знаю, почему вы не получаете ошибку компиляции, чтобы не инициализировать ее - вы это оставили? – ltjax

ответ

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; 
+0

Ahh, я работаю с JMonkey всю неделю до сих пор, и я привык к тому, чтобы инициализировать векторы как новые объекты перед их использованием. – Adam

Смежные вопросы