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)
{
}