【问题标题】:Classes accessing each other with pointers类通过指针相互访问
【发布时间】:2014-03-11 22:13:37
【问题描述】:

我仍然对指针感到困惑,也许你能启发我一点。

我有一些相互指向的类,但无法以正确的方式访问它们。

#include <vector>
#include <iostream>

class Player;
class Trainer;
class Team {
    Trainer* trainer_;
    std::vector<Player*> player_;
public:
    std::vector<Player*> player() { return player_; }
    Trainer* trainer() { return trainer_; }

    std::vector<Player*> get_playerlist(){
        return player_;
    };
};

class Player {
public: 

    void setteam_(Team* x){
        team_ = x;
    }
    private:
    Team* team_;
};

class Trainer {
    Team* Team_;
};
int main()
{
    Player player1;
    Team team1;
    std::vector<Player*> playerlist;
    player1.setteam_(&team1);
    playerlist = team1.get_playerlist();
    std::cout << playerlist.size();
    std::cin.get();
    return 0;
}

主要有 player1 创建并分配给 team1 的 playerlist,现在当我得到 playerlist 时他应该以某种方式出现在那里。但是这段代码的输出却是team 1的playerlist的size还是0,我做错了什么?

【问题讨论】:

    标签: c++ class pointers


    【解决方案1】:

    您的Team 类没有将玩家实际添加到player_ 向量的方法。将team_ 指针设置为team1 实例是不够的。

    【讨论】:

      【解决方案2】:
      player1.setteam_(&team1);
      

      接下来会发生什么:

      void setteam_(Team* x){
          team_ = x;
      }
      

      您在此声明此Player 具有指向Team 的指针设置为与x 相同的地址。但这并不意味着这个Team 对象在std::vector 中有指向玩家的指针。这不会自动发生,您需要以下内容:

      void setteam_(Team* x){
          team_ = x;
          x->addPlayer( this);  // add to vector
      }
      

      【讨论】:

      • thx 不错的解决方案,它有效;)以前从未见过“这个”。
      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多