【发布时间】:2021-10-12 20:10:09
【问题描述】:
我有一个关于课程及其成员如何更新的问题。
所以基本上,我有一个简单的类
class Player
{
public:
Player();
std::vector <std::string> hand = {"r4", "r1", "g5"};
};
Player::Player()
{
}
我将这些类的实例添加到另一个向量中
std::vector <Player> players;
Player p1;
Player p2;
players.push_back(p1);
players.push_back(p2);
然后我尝试更新初始化类的向量在存储类的向量
//doesn't work
//p1.hand.push_back("test1");
//p2.hand.push_back("test2");
//works
players[0].hand.push_back("test1");
players[1].hand.push_back("test2");
for (int i = 0; i < 2; i++)
std::cout << players[i].hand[(players[i].hand.size() - 1)] << std::endl;
我很困惑为什么不使用第一种方法将测试字符串添加到 player 数组中的类的向量中。是不是因为它与我第一次初始化时的类实例不同?如果有人能为我澄清这一点,将不胜感激。谢谢!
【问题讨论】:
-
好的,有道理,谢谢。但出于好奇,有没有办法将原件放入向量中?
-
在处理 C++ 时改变您编写代码的方式。 C++ 不是 Java 或 JavaScript。拥有原始实例的令人信服的理由是什么?如果向量有它们,本地版本无论如何都会超出范围。
-
@tothemax,有几种方法可以解决。
std::vector<std::reference_wrapper<Player>>将是“最干净的”,但非拥有引用的向量很少是正确的方法。 -
@PaulMcKenzie 是的,哈哈,我实际上只使用 JavaScript,所以我试图弄清楚这些东西在 C++ 中的工作方式。您有任何可以促进这种转变的书籍或资源推荐吗?
-
@tothemax 你可以从这里开始:stackoverflow.com/questions/388242/…