Не удается создать массив объектов в классе 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 успешно уничтожен!