重载operator +后程序崩溃

时间:2019-05-03 15:20:31

标签: c++ operator-overloading

我正在尝试运算符重载,但我不知道为什么我的程序不断崩溃。

当我在operator <<函数中取消引用p.name时,它崩溃,而当我不重新引用它时,它仅打印出字符串的地址,并且程序不会崩溃。 问题的核心可能在于将对象p1设置为等于operator +函数的返回值,但是我无法弄清楚那里到底发生了什么。

main.cpp

int main()
{
    Player p1("John", 10);
    Player p2("Jon");
    cout<<p1<<endl;
    cout<<p2<<endl;
    p1=p2+20;
    cout<<p1;
}

player.h

class Player
{
    public:
        Player(string _name);
        Player(string _name, int _score);
        ~Player();
        friend ostream& operator<<(ostream& os, Player& p);
        Player operator+(int p);

    private:
        string *_name;
        int _score;
};

player.cpp


Player::Player(string name)
{
    _name=new string;
    *_name = name;
    _score = 0;
}
Player::Player(string name, int score)
{
    _name=new string;
    *_name = name;
    _score = score;
    cout<<"Konst1"<<endl;
}
Player::~Player()
{
    delete _name;
    _name = 0;
}
ostream& operator<<(ostream& os, Player& p)
{
    os<<*p._name<<" won: "<<p._score<<" pts";
    return os;
}
Player Player::operator+(int p)
{
    Player obj(*_name, _score+p);
    return obj;
}

预期结果将为“约翰赢了:20分”。

编辑:将字符串_name放在堆内存中是我获得的任务的一部分,因此我必须尝试使其工作。

0 个答案:

没有答案