operator= 重载,递归调用的终止符
operator= overloading, terminator called recursively
我在重载赋值运算符时遇到问题。我在控制台中收到“递归调用的终止符”错误。
我对数据结构比较陌生,在调试这个问题时遇到了问题。
这里是 class 声明:
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;
};
这里是 operator= 函数的实现:
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=(const Player& p_)
,
我认为一线和二线有问题。
您已经通过 delete pos
删除了内存中的 pos
但您正在尝试将 pos
设置为 nullptr
。
我在重载赋值运算符时遇到问题。我在控制台中收到“递归调用的终止符”错误。
我对数据结构比较陌生,在调试这个问题时遇到了问题。
这里是 class 声明:
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;
};
这里是 operator= 函数的实现:
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=(const Player& p_)
,
我认为一线和二线有问题。
您已经通过 delete pos
删除了内存中的 pos
但您正在尝试将 pos
设置为 nullptr
。