我的C ++向量非常奇怪的行为

n0pe

我已经调试了很长时间-但我不知道问题出在哪里。

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使用上面的代码,并输入姓名BobJoe以及Tim,我会得到下面的输出:

Enter a name: bob
bob

Enter a name: joe
joe


Enter a name: tim
tim



[exit]

因此,以某种方式,当我将播放器添加到引导程序时,它会损坏或发生类似情况。该对象在插入之前是有效的,因为我回显了名称。矢量的大小也不断增加,因为它打印的空白行等于添加的玩家数量。

到底是怎么回事?

匆忙

您可能有一个复制构造函数,而不在其中复制名称。因此,当您在向量上push_back时,名称为空的Player对象将被压入向量。
正确实现复制构造函数,它应该可以工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章