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]