C++ 我的C++;矢量

C++ 我的C++;矢量,c++,c++11,vector,C++,C++11,Vector,我已经调试了很长时间了,但是我不知道问题出在哪里 我从控制台(通过std::cin)获得一个name,然后用它创建一个新的Player对象。然后我将新对象传递给Gameboard,以添加到std::vector中,其中J是模板的一部分。代码如下: main.cpp Gameboard<Tile,Player,5,5> board = Gameboard<Tile,Player,5,5>(); std::string name; std::cout << "E

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

我从控制台(通过
std::cin
)获得一个
name
,然后用它创建一个新的
Player
对象。然后我将新对象传递给
Gameboard
,以添加到
std::vector
中,其中
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));
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]
因此,当我将玩家添加到向量时,它会被破坏或类似的东西。该对象在插入之前是有效的,因为我回显了名称。向量的大小也在增长,因为它打印的空白行等于添加的玩家数量


发生了什么事?

您可能有一个复制构造函数,其中没有复制名称。所以当你把_推回到向量上时,一个名字为空的玩家对象会被推到向量上

正确地实现复制构造函数,它应该可以工作

您可能有一个不复制名称的复制构造函数。所以当你把_推回到向量上时,一个名字为空的玩家对象会被推到向量上

正确地实现复制构造函数,它应该可以工作

您可能有一个不复制名称的复制构造函数。所以当你把_推回到向量上时,一个名字为空的玩家对象会被推到向量上

正确地实现复制构造函数,它应该可以工作

您可能有一个不复制名称的复制构造函数。所以当你把_推回到向量上时,一个名字为空的玩家对象会被推到向量上



正确地实现复制构造函数,它应该可以工作。

无法复制:另外,请注意,
main()
中缺少一些分号。能否将所有内容发布到一个文件中,以便我们可以轻松地复制?但是代码看起来是正确的…不要重新键入代码。复制并粘贴显示此问题的实际代码。@拉什,你说得对!我已经为一个复制构造函数下了定义,但还没有完成实现。我觉得自己像个十足的白痴。如果你把它作为一个答案,我会接受的。谢谢大家。无法复制:另外,请注意,您的
main()
中缺少了一些分号。能否将所有内容发布到一个文件中,以便我们可以轻松复制?但是代码看起来是正确的…不要重新键入代码。复制并粘贴显示此问题的实际代码。@拉什,你说得对!我已经为一个复制构造函数下了定义,但还没有完成实现。我觉得自己像个十足的白痴。如果你把它作为一个答案,我会接受的。谢谢大家。无法复制:另外,请注意,您的
main()
中缺少了一些分号。能否将所有内容发布到一个文件中,以便我们可以轻松复制?但是代码看起来是正确的…不要重新键入代码。复制并粘贴显示此问题的实际代码。@拉什,你说得对!我已经为一个复制构造函数下了定义,但还没有完成实现。我觉得自己像个十足的白痴。如果你把它作为一个答案,我会接受的。谢谢大家。无法复制:另外,请注意,您的
main()
中缺少了一些分号。能否将所有内容发布到一个文件中,以便我们可以轻松复制?但是代码看起来是正确的…不要重新键入代码。复制并粘贴显示此问题的实际代码。@拉什,你说得对!我已经为一个复制构造函数下了定义,但还没有完成实现。我觉得自己像个十足的白痴。如果你把它作为一个答案,我会接受的。谢谢大家。或者让编译器实现复制构造函数;)没错。在大多数情况下,把它交给编译器处理是很好的,只要你没有把普通的旧指针/动态指针弄得乱七八糟allocation@vsoftco:当然可以,遵循五的规则。但也要遵循“一个分配,一个对象来管理它”的规则。@maxmackie:默认的复制构造函数将调用每个成员的复制构造函数
std::map
有一个复制构造函数,该构造函数具有合理的实现,并且可能比将所有元素插入一个空白的新
map
对象运行得快得多。或者让编译器实现复制构造函数;)没错。在大多数情况下,把它交给编译器处理是很好的,只要你没有把普通的旧指针/动态指针弄得乱七八糟allocation@vsoftco:当然可以,遵循五的规则。但也要遵循“一个分配,一个对象来管理它”的规则。@maxmackie:默认的复制构造函数将调用每个成员的复制构造函数
std::map
有一个复制构造函数,该构造函数具有合理的实现,并且可能比将所有元素插入一个空白的新
map
对象运行得快得多。或者让编译器实现复制构造函数;)没错。在大多数情况下,把它交给编译器处理是很好的,只要你没有把普通的旧指针/动态指针弄得乱七八糟allocation@vsoftco:当然可以,遵循五的规则。但也要遵循“一个分配,一个对象来管理它”的规则。@maxmackie:默认的复制构造函数将调用每个成员的复制构造函数
std::map
有一个复制构造函数,该构造函数具有合理的实现,并且可能比将所有元素插入一个空白的新
map
对象运行得快得多。或者让编译器实现复制构造函数;)没错。在大多数情况下,把它交给编译器处理是很好的,只要你没有把普通的旧指针/动态指针弄得乱七八糟allocation@vsoftco:当然可以,遵循五的规则。但也要遵循“一个分配,一个对象来管理它”的规则。@maxmackie:默认的复制构造函数将调用每个成员的复制构造函数<
Enter a name: bob
bob

Enter a name: joe
joe


Enter a name: tim
tim



[exit]