Как я могу получить доступ к методу в объекте, когда указатель объекта хранится в векторе? - PullRequest
1 голос
/ 12 апреля 2019

В C ++, с кодом Visual Studio,

я сделал класс Person.Я сделал vector <Person*> phonebook.Я создал объект Person newperson и поместил его в свой вектор phonebook И я хочу получить доступ к newperson.print().Поэтому я написал phonebook[i]->print, но он показывает ошибку во время выполнения.

Я подумал, что это проблема конструктора копирования, но после того, как я его добавил, это было то же самое.И я также попытался отделиться, создав новый фиктивный объект, но он тоже не работает.Как я могу получить доступ к методу объекта через указатель объекта, хранящийся в векторе?

Person(const Person &oldperson)
        {
            firstname = oldperson.firstname;
            lastname = oldperson.lastname;
            phonenumber = oldperson.phonenumber;
        }
//This is my copy constructor,


void PrintAll()
{
    for(int i = 0; i < phonebook.size(); i++)
    {
        cout << "Hello " << i << endl;//it runs
        Person personprinter = Person(*phonebook[i]);
        cout << "Hello 2" << endl;//it does not run
        personprinter.Print();
    }
}
//This is my method where I will call object's method.

Ожидается: .Print() выполняется.

Факт: Person personprinter = Person(*phonebook[i]); не выполняется.

1 Ответ

0 голосов
/ 12 апреля 2019

Я думаю, нам нужно определить телефонную книгу, а также посмотреть, как вы добавили в нее объект.

Объект, который вы добавили в телефонную книгу, вышел из области видимости, поэтому он был удален (вы не сделали новый для создания объекта).

Затем вы используете указатель на удаленныйобъект.

{
    Person newperson = Person(nameinarray[0], nameinarray[1], phonenumber);
    phonebook.push_back(&newperson);
}// closing the curly brace here calls delete on newperson  
// pointer in phonebook now points to a deleted object

VS

{
    Person* newperson = new Person(nameinarray[0], nameinarray[1], phonenumber);
    phonebook.push_back(newperson);
}  
// pointer in phone book is still valid 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...