C++ C+中的构造函数+;等级
我有两门课,玩家和游戏C++ C+中的构造函数+;等级,c++,C++,我有两门课,玩家和游戏 class Game { private: int maxPlayer; Player** playersArray; public: Game(int maxPlayer); ~Game(); } PlayerArray中的每个索引都包含指向类Player的指针。以下构造函数不起作用,因为此消息不断出现: error: invalid use
class Game
{
private:
int maxPlayer;
Player** playersArray;
public:
Game(int maxPlayer);
~Game();
}
PlayerArray中的每个索引都包含指向类Player的指针。以下构造函数不起作用,因为此消息不断出现:
error: invalid use of 'Player::Player' playersArray[i]->Player();
Game::Game(int maxPlayer)
{ this->maxPlayer=maxPlayer;
this->playersArray = new Player*[maxPlayer];
for(int i=0;i<maxPlayer;i++)
{
playersArray[i]->Player();
}
}
我的目标是将player_name设置为NULL,而不是设置为内存中的随机位置。这就是玩家()应该做的。您没有正确填充
游戏数组。您试图调用Player()
构造函数,就好像它是一个常规类方法(它不是),更糟糕的是,您是通过未初始化的Player*
指针调用它
您需要使用new
操作符,例如:
class Game
{
private:
int maxPlayers;
Player** playersArray;
public:
Game(int aMaxPlayers);
~Game();
}
Game::Game(int aMaxPlayers)
{
maxPlayers = aMaxPlayers;
playersArray = new Player*[maxPlayers];
for(int i = 0; i < maxPlayers; ++i)
playersArray[i] = new Player; // <-- here
}
Game::~Game()
{
for(int i = 0; i < maxPlayers; ++i)
delete playersArray[i];
delete[] playersArray;
}
也就是说,当Player
对象数组满足以下条件时,不需要使用Player*
指针数组:
class Game
{
private:
int maxPlayers;
Player* playersArray;
public:
Game(int aMaxPlayers);
~Game();
}
Game::Game(int aMaxPlayers)
{
maxPlayers = aMaxPlayers;
playersArray = new Player[maxPlayers];
}
Game::~Game()
{
delete[] playersArray;
}
或:
你不应该直接调用构造函数。在这种情况下我能做什么?playersArray[I]=新玩家代码>已经询问@SamerTufail在哪里可以看到对构造函数的显式调用?对ctor的显式调用可以是new(buffer)->T()
或new(buffer)T->T()代码>
#include <memory>
class Game
{
private:
int maxPlayers;
std::unique_ptr<std::unique_ptr<Player>[]> playersArray;
public:
Game(int aMaxPlayers);
}
Game::Game(int aMaxPlayers)
{
maxPlayers = aMaxPlayers;
playersArray = std::make_unique<std::unique_ptr<Player>[]>(maxPlayers);
for(int i = 0; i < maxPlayers; ++i)
playersArray[i] = std::make_unique<Player>();
}
class Game
{
private:
int maxPlayers;
Player* playersArray;
public:
Game(int aMaxPlayers);
~Game();
}
Game::Game(int aMaxPlayers)
{
maxPlayers = aMaxPlayers;
playersArray = new Player[maxPlayers];
}
Game::~Game()
{
delete[] playersArray;
}
#include <memory>
class Game
{
private:
int maxPlayers;
std::unique_ptr<Player[]> playersArray;
public:
Game(int aMaxPlayers);
}
Game::Game(int aMaxPlayers)
{
maxPlayers = aMaxPlayers;
playersArray = std::make_unique<Player[]>(maxPlayers);
}
#include <vector>
class Game
{
private:
std::vector<Player> playersArray;
public:
Game(int maxPlayers);
}
Game::Game(int maxPlayers)
: playersArray(maxPlayers)
{
}