在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]);
无法运行。
答案 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