C++ 运算符=重载,递归调用终止符
我在重载赋值运算符时遇到问题。控制台中出现“递归调用终止符”错误 我对数据结构比较陌生,调试这个问题时遇到困难 下面是类声明:C++ 运算符=重载,递归调用终止符,c++,operator-overloading,overloading,C++,Operator Overloading,Overloading,我在重载赋值运算符时遇到问题。控制台中出现“递归调用终止符”错误 我对数据结构比较陌生,调试这个问题时遇到困难 下面是类声明: class Player { public: Player(const unsigned int x_, const unsigned int y_, const char i_); Player(const Player& p_); ~Player(); unsigned int getX() const; unsig
class Player
{
public:
Player(const unsigned int x_, const unsigned int y_, const char i_);
Player(const Player& p_);
~Player();
unsigned int getX() const;
unsigned int getY() const;
char getI() const;
void updatePosition(int newX, int newY);
Player& operator=(const Player& p_);
private:
struct Position{
unsigned int x;
unsigned int y;
};
Position* pos;
char i;
};
下面是运算符=函数的实现:
Player& Player::operator=(const Player& p_)
{
delete pos;
pos = nullptr;
pos = new Position();
pos->x = p_.getX();
pos->y = p_.getY();
i = p_.getI();
return *this;
}
我认为使用
Position*pos
不是一个好选择。
您必须始终通过构造函数初始化它
尽管您这样做了,但在Player&operator=(constplayer&p)
中,
我认为一线和二线有问题。
您已经通过delete pos
删除了内存中的pos
但是您试图将
pos
设置为nullptr
不相关:没有充分的理由将pos
设置为指针。这只会使事情复杂化,并迫使需要复制和赋值操作符。没有指针,就没有问题。或者至少不是你目前正在与之战斗的玩家。你能添加实际的错误消息吗?最好的猜测——你正在尝试为自己分配一个玩家:Player p代码><代码>p=p代码>或类似的东西。您如何确定位置
指向有效的位置
?警告: