我已经调试了很长时间-但我不知道问题出在哪里。
我name
从控制台(通过std::cin
)获取了一个,然后继续Player
用它创建一个新对象。然后,我将新对象传递到,Gameboard
以将其添加到模板的std::vector<J>
whereJ
中。这是代码:
main.cpp
Gameboard<Tile,Player,5,5> board = Gameboard<Tile,Player,5,5>();
std::string name;
std::cout << "Enter a name: "
std::cin >> name;
board.setPlayer(Player(name));
std::cout << std::endl;
std::cout << "Enter a name: "
std::cin >> name;
board.setPlayer(Player(name));
std::cout << std::endl;
std::cout << "Enter a name: "
std::cin >> name;
board.setPlayer(Player(name));
游戏板
template<class T, class J, const int X, const int Y>
class Gameboard {
std::vector<J> players;
public:
void setPlayer(J player);
};
template<class T, class J, const int X, const int Y>
void Gameboard<T,J,X,Y>::setPlayer(J p) {
////// DEBUG CODE //////
std::cout << p.getName() << std::endl;
players.push_back(p);
for (int i = 0; i < players.size(); i++) {
std::cout << players.at(i).getName() << std::endl;
}
}
player.h / player.cpp
class Player {
std::string name;
public:
Player(std::string _name);
std::string getName();
};
Player::Player(std::string _name) {
name = _name;
}
std::string Player::getName() {
return name;
}
我认为我已将问题归结为标记的代码DEBUG CODE
。使用上面的代码,并输入姓名Bob
,Joe
以及Tim
,我会得到下面的输出:
Enter a name: bob
bob
Enter a name: joe
joe
Enter a name: tim
tim
[exit]
因此,以某种方式,当我将播放器添加到引导程序时,它会损坏或发生类似情况。该对象在插入之前是有效的,因为我回显了名称。矢量的大小也不断增加,因为它打印的空白行等于添加的玩家数量。
到底是怎么回事?
您可能有一个复制构造函数,而不在其中复制名称。因此,当您在向量上push_back时,名称为空的Player对象将被压入向量。
正确实现复制构造函数,它应该可以工作
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句