可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构



我正在用随机的多米诺骨牌填满两个玩家的手,没有问题。当我将结构发送到另一个职业时,我无法再访问玩家的手。

using namespace std;
struct player {
int playerNum;
vector < pair <int, int>> hand;
};
vector < pair <int, int>> availablePieces;
void Player::createHand(vector < pair <int, int>> &multiVector, player* player) {
srand(time(NULL)); // rand seed
int ranNumb;
//fill players' hand
for (int i = 0; i < 10; i++) {
ranNumb = rand() % multiVector.size();
player[0].hand.push_back(multiVector[ranNumb]);
multiVector.erase(multiVector.begin() + ranNumb);
ranNumb = rand() % multiVector.size();
player[1].hand.push_back(multiVector[ranNumb]);
multiVector.erase(multiVector.begin() + ranNumb);
}
}
setAvailablePieces(multiVector);
void Player::createPlayers(vector < pair <int, int>>& multiVector) {
struct player* domiPlayer = new struct player[2];
domiPlayer[0].playerNum = 1;
domiPlayer[1].playerNum = 2;
createHand(multiVector, domiPlayer);
}
Game gameObj;
gameObj.API(player, availablePieces);

游戏标题:

using namespace std;
class Game
{
public:
void API(struct player* player, vector < pair <int, int>> &availablePieces);
private:
void playGame(player* player, vector < pair <int, int>>& availablePieces);
};

游戏类:

void Game::playGame(player* player, vector < pair <int, int>>& availablePieces) {
cout << player[0].hand[0].first << endl;
}
void Game::API(player* player, vector < pair <int, int>> &availablePieces) {
playGame(player, availablePieces);
}

在功能playGame中,我无法访问单个玩家的手。我收到错误:表达式必须是指向完整对象类型的指针。

我最初的回答是不正确的(道歉)。但是在再次查看此内容后,我想我看到了您的问题(除了createPlayers完成时player对象的泄漏,如@TedLyngmo所述)。

创建players时,会再次使用struct。这不是必需的,因为您已经将player定义为结构。请参阅下文,其中我为您的代码制作了一个更简单的示例,初始化players并将它们存储在Game类中:

#include <stdio.h>
struct player {
int test = 2;
};
class Game {
public:
Game(const int nPlayers);
void playGame();
private:
player *players;
};
Game::Game(const int nPlayers) {
players = new player[nPlayers];
}
void Game::playGame() {
printf("%dn", players[0].test);
}
int main() {
const int nPlayers = 2;
Game game(nPlayers);
game.playGame();
}

这解决了players超出范围以及在初始化players时不再使用struct的问题。我还省略了Player类,因为不清楚您发布的代码中来自何处。

最新更新