Как правильно вернуть данные из объекта с помощью команды в другом объекте - PullRequest
0 голосов
/ 19 сентября 2018

Я занимаюсь программированием и создал программу «Приятель», в которой объект может иметь имя и имя приятеля, который содержит адрес другого объекта, называемого «Друзья».

Вот мой класс:

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

В моем основном файле я назначаю приятелю "a" приятеля с именем "b":

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

Затем я хочу указать имена отдельных объектов через назначенные имприятели, но я терплю крах на этой части.Вот код:

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

Разве это не должно работать?Я передаю ссылку правильно, подумал я.Не могли бы вы помочь мне обнаружить какие-либо ошибки?

1 Ответ

0 голосов
/ 19 сентября 2018

Попробуйте следующие исправления:

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 перед разыменованием.

...