【问题标题】:Can access player struct in one class but not the other可以访问一个类中的播放器结构,但不能访问另一个类
【发布时间】:2020-03-07 14:22:05
【问题描述】:

我正在用随机多米诺骨牌填充两个玩家的手,没有问题。当我将结构发送到另一个类时,我不能再访问玩家的手了。

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 中,我无法访问单个玩家的手牌。我收到错误:表达式必须是指向完整对象类型的指针。

【问题讨论】:

标签: c++ c++11 pointers struct


【解决方案1】:

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

当您创建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("%d\n", players[0].test);
}

int main() {
    const int nPlayers = 2;
    Game game(nPlayers);
    game.playGame();
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多