gpt4 book ai didi

c++ - 当对象的指针存储在 vector 中时,如何访问对象中的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:43 35 4
gpt4 key购买 nike

在 C++ 中,使用 Visual Studio Code,

我创建了 Person 类。我做了一个vector <Person*> phonebook .我构建了一个对象 Person newperson并将它插入我的 vector phonebook我想访问 newperson.print() .所以我写了phonebook[i]->print但它显示运行时错误。

我还以为是拷贝构造函数的问题,结果加了之后还是一样。我也尝试通过构造一个新的虚拟对象来分离,但它也不起作用。如何通过存储在 vector 中的对象指针访问对象的方法?

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]);不运行。

最佳答案

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

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

那么您正在使用指向已删除对象的指针。

{
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

对比

{
Person* newperson = new Person(nameinarray[0], nameinarray[1], phonenumber);
phonebook.push_back(newperson);
}
// pointer in phone book is still valid

关于c++ - 当对象的指针存储在 vector 中时,如何访问对象中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55650451/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com