Не удается создать массив объектов в классе C++

Вот фрагмент класса игрока.
Динамический массив типа string создается без ошибок, а вот при создании массива экземпляров класса Weapon программа не компилируется. Почему?
Интересно еще то, что при попытке удалить из динамической памяти массив Weapon*, программа говорит, что Weapon* не является указателем, однако массив string успешно удаляет.

class Player 
{
private:
    std::string*                inventory = new string[10];
    Weapon*                     weapons = new Weapon[10];
public:
    ~Player ()
    {
        cout << "Объект " << this << " успешно уничтожен!" << endl;
        delete[] inventory;
        delete[] weapons;
        inventory = nullptr;
        weapons = nullptr;
    }

Вот, собственно, класс Weapon :

class Weapon {
private:
    std::string model;
    unsigned int shootsPerTime = 1; // SPT
    int damage;
public:
    void SetModel(std::string model)
    {
        this->model = model;
    }
    std::string GetModel()
    {
        return model;
    }
    void SetShootsPerTime(unsigned int spt)
    {
        shootsPerTime = spt;
    }
    unsigned int GetShootsPerTime()
    {
        return shootsPerTime;
    }
    void SetDamage(int damage)
    {
        this->damage = damage;
    }
    int GetDamage()
    {
        return damage;
    }
};

Ответы (1 шт):

Автор решения: Alxolo

Добавил using namespace std; Разместил определение класса Weapon перед Player Добавил элементарную тестовую функцию test в класс Player.

#include <string>
#include <iostream>

using namespace std;

class Weapon {
private:
  std::string model;
  unsigned int shootsPerTime = 1; // SPT
  int damage;

public:
  void SetModel(std::string model) { this->model = model; }
  std::string GetModel() { return model; }
  void SetShootsPerTime(unsigned int spt) { shootsPerTime = spt; }
  unsigned int GetShootsPerTime() { return shootsPerTime; }
  void SetDamage(int damage) { this->damage = damage; }
  int GetDamage() { return damage; }
};

class Player {
private:
  std::string *inventory = new string[10];
  Weapon *weapons = new Weapon[10];

public:
  ~Player() {
     cout << "Объект " << this << " успешно уничтожен!" << endl;
    delete[] inventory;
    delete[] weapons;
    inventory = nullptr;
    weapons = nullptr;
  }

  void test() 
  {
    weapons[0].SetShootsPerTime(1000);

    std::cout << weapons[0].GetShootsPerTime() << std::endl;
  }
};

int main()
{
  Player someone;

  someone.test();
}

более менее работает:

❯ g++ -o test test.cpp
❯ ./test
1000
Объект 0x7ffc91ae5e10 успешно уничтожен!
→ Ссылка