【发布时间】:2012-01-27 15:10:56
【问题描述】:
基于以前的问题产生的问题:vector::erase with pointer member,Remove elements of a vector inside the loop,我仍然需要一些有关 vector.erase 功能的帮助。我被指示实现一个复制构造函数以使擦除函数在向量上工作,另一个问题中也提到了这一点。在我的相关类中实现函数运算符是必不可少的。这样做时,我在创建复制构造函数时遇到另一个错误,我找不到很长时间的原因。错误是“Player::Player(const Player& otherPlayer) does not provide an initiallizer for:”。我究竟做错了什么?考虑到 Player 包含作为类成员的 map、指针和引用(bank 是一个引用)。一个简单的赋值是否足以进行初始化?
我该怎么办?
class Player
{
public:
Player(int,int,string, Bank&);
Player(const Player&);
Player& operator = (const Player& rhs);
Player::Player(const Player& otherPlayer)
{
ID = otherPlayer.ID;
pName = otherPlayer.pName;
pMoney = otherPlayer.pMoney;
doubleIndicator = otherPlayer.doubleIndicator;
position = otherPlayer.position;
bank = otherPlayer.bank;
colBought = otherPlayer.colBought;
housesColBuilt = otherPlayer.housesColBuilt;
}
更新: 我在执行 operator= 时收到警告:“返回局部变量或临时地址的地址”。这会引起真正的问题吗?如果是这样,我该如何修改它来克服这个问题?
Player& Player::operator=(const Player& rhs)
{
return Player(rhs);
}
这样,我还是收到了递归函数会导致堆栈溢出的警告:
Player& Player::operator=(const Player& rhs)
{
*this = Player(rhs);
return *this;
}
有什么提示吗?
【问题讨论】:
-
回复:更新。是的,这是一个真正的问题。 1)你不执行任何任务。 2) 您返回对无效对象的引用。 (如果您认为它有其他用途,则返回值仅允许链接。)
-
我需要什么样的作业?为什么我需要复制构造函数?难道所有的操作都不能在operator=的函数里面进行吗?
标签: c++ vector constructor erase