如何通过另一个对象中的命令从一个对象正确返回数据

时间:2018-09-19 19:44:17

标签: c++ class object linked-list reference

我正在练习编码,并创建了一个“伙伴”程序,其中一个对象可以有一个名称和一个伙伴,该伙伴包含另一个名为“伙伴”的对象的地址。

这是我的课程:

    class Buddy {
public:
    Buddy() {
        name = "NoName";
    }
    Buddy(string newName) {
        name = newName;
    }
    void setName(string newName) {
        name = newName;
    }
    string getName() {
        return name;
    }
    void setBuddy(Buddy buddy2) {
        buddy = &buddy2;
    }
    string getBuddyName() {
        return buddy->getName();
    }
private:
    string name;
    Buddy *buddy = NULL;
};

在我的主文件中,我为Buddy“ a”分配了一个名为“ b”的伙伴:

a.setBuddy(b);
b.setBuddy(a);

然后,我想通过分配给他们的伙伴来列出各个对象的名称,但是我在这部分上崩溃了。这是代码:

cout << "A's Buddy: " << a.getBuddyName() << endl;
cout << "B's Buddy: " << b.getBuddyName() << endl;

这行不行吗?我想,我正确地传递了参考。你能帮我发现任何错误吗?

1 个答案:

答案 0 :(得分:0)

尝试以下修复程序:

void setBuddy(Buddy& buddy2) { // an actual reference, not a copy of the original
    buddy = &buddy2;
}
string getBuddyName() {
    return buddy ? buddy->getName() : string("");
}

setBuddy的问题在于它存储了其参数的地址,即一个临时对象(在调用函数时复制),该对象在函数返回后将无效。并且getBuddyName在取消引用之前没有检查空的buddy指针。