首页 > 解决方案 > operator= 重载,终止符递归调用

问题描述

我在重载赋值运算符时遇到问题。我在控制台中收到“递归调用终止符”错误。

我对数据结构比较陌生,我在调试这个问题时遇到了麻烦。

这是类声明:

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;
}

标签: c++operator-overloadingoverloading

解决方案


我认为使用Position* pos不是一个好的选择。您始终必须通过构造函数对其进行初始化。

尽管您这样做了Player& operator=(const Player& p_),但我认为第一行和第二行存在问题。pos您已经在内存中删除了,delete pos 但您正在尝试设置posnullptr.


推荐阅读