当对象的指针存储在向量中时,如何访问对象中的方法?

时间:2019-04-12 11:17:47

标签: c++ pointers vector

在C ++中,使用Visual Studio代码

我成为班上的人。 我做了一个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 :(得分:0)

我认为我们需要定义电话簿,还需要了解您在其中添加对象的方式。

您在电话簿中添加的对象已超出范围,因此已将其删除(您没有进行新操作来构建该对象)。

然后,您正在使用指向已删除对象的指针。

{
    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