【问题标题】:I would like to call an object in an object to other class in c++我想将一个对象中的一个对象调用到 c++ 中的其他类
【发布时间】:2020-10-13 04:08:32
【问题描述】:
class Player {
public:
    // something
    double getVelPlayer();

private:
    // something
    sf::Sprite mPlayer;
};

class Game {
public:
    // something
private:
    void processEvents();
    void update();
    void render();
    // something
};
void Game::update() {
    sf::Vector2f movement(0.f, 0.f);
    if(mIsMovingUp)
        movement.y -= player.getVelPlayer() * timeElapsed.asMilliseconds();
    if(mIsMovingDown)
        movement.y += player.getVelPlayer() * timeElapsed.asMilliseconds();
    if(mIsMovingLeft)
        movement.x -= player.getVelPlayer() * timeElapsed.asMilliseconds();
    if(mIsMovingRight)
        movement.x += player.getVelPlayer() * timeElapsed.asMilliseconds();
    player.mPlayer.move(movement);
}

void Game::render() {
    mWindow.clear();
    mWindow.draw(player.mPlayer);
    mWindow.display();
}
int main() {
    Player* player = new Player;
    Game* game = new Game;

    delete game;
    delete player;

    return 0;
}

我得到一个错误:'player' 没有在这个范围内声明

我需要从玩家对象中获取 mPlayer 对象到 Game::update 和 Game::update。

但如果我尝试编译,我总是会收到错误

如何声明 Player.getVelPlayer 或 draw(player.mPlayer)?

由于mPlayer是一个对象,所以我想我必须在一个对象中调用一个对象,但我不知道怎么做。

【问题讨论】:

  • 这不是我从该代码中得到的错误,因此您的问题无法重现。我得到error: ‘sf’ does not name a type sf::Sprite mPlayer; - 请发一个minimal reproducible example
  • 对不起,我正在使用 SFML。我忘了解释。
  • sfml 部分与问题无关,因此您应该能够移除这些部分以生成 minimal reproducible example
  • 我正在尝试使用内置在 Player 类中的 sf::Sprite 对象作为 Game 类。所以也许你可以创建一个空的 Sprite 类。
  • 是的,好吧,创建minimal reproducible example 通常应该由提出问题的人来完成,这样试图提供帮助的人就可以复制代码并尝试编译它以重现提问者提出的问题。在这种情况下,我设法看到了问题,但无法重现相同的错误。

标签: c++ class object


【解决方案1】:

您的Game 类没有名为player 的成员变量,并且您在main 中分配的Player 无法从Game 对象中访问。

考虑将 Player 移动到 Game 类中 - 并且不需要使用 new

class Game {
public:
    // something
private:
    void processEvents();
    void update();
    void render();
    // something

    Player player; // a Player will be created when a `Game` is created.
};
int main() {
    Game game; // no need to new / delete

    return 0;
}

【讨论】:

  • 感谢您的回复。另外,有没有办法在 main 中构建一个播放器对象并在 Game 类中调用一个 mPlayer?
  • @OKUU 当然,你可以让他们有几乎任何关系。没有玩家的游戏,没有游戏的玩家,由玩家和其他物体组成的游戏等等。这一切都取决于你喜欢什么。
  • @OKUU 您是否尝试将Player 移动到Game - 或者您是否希望Game 实例能够在没有Player 的情况下存在?
  • 是的。我已经将玩家移动到游戏中,并发现它可以正常工作。但是,正如您所说,我希望 Game 实例能够在没有 Player 的情况下存在。
  • 我应该添加什么细节?
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多