我已经调试了很长时间了 - 但我不知道问题是什么。
我从控制台(通过name
)获得std::cin
,然后继续使用它创建一个新的Player
对象。然后我将新对象传递给Gameboard
以添加到std::vector<J>
,其中J
是模板的一部分。这是代码:
的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));
gameboard.h
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]
所以不知何故,当我将玩家添加到向量时,它会被破坏或类似。该对象在插入之前是有效的,因为我回显了该名称。矢量的大小也在增长,因为它打印的空行等于添加的玩家数量。
发生了什么事?
答案 0 :(得分:3)
您可能有一个复制构造函数,您没有复制该名称。因此,当你对向量进行push_back时,具有空名称的Player对象将被推送到向量上。
正确实现复制构造函数,它应该工作