Weapon wep;
wep = Uzi;
Это нарезка. Uzi
- это Weapon
, но не наоборот. Вы можете использовать указатели для этого:
Weapon* wep = new Uzi();
Также вы получаете сообщение об ошибке, потому что в классе Weapon()
нет метода Shot()
.
Возможно, вы захотите объявить его virtual
, а также сделать его абстрактным (необязательно). Вы делаете это virtual
, чтобы разрешить полиморфизм.
Таким образом:
Weapon* wep = new Uzi();
wep->Shot();
вызовет Shot()
в классе Uzi
, хотя он вызывается по указателю Weapon
.
Должно работать следующее:
class Weapon{
public:
int dmg;
float speed;
int rate;
virtual void Shot(float angle) {}; //move implementation to cpp file
};