现在我有以下内容:
boost::ptr_vector <Customer> cvect;
ifstream cDbase("datafiles/customers.txt");
while (cDbase.good())
{
while (!cDbase.eof())
{
cDbase >> newCust;
Customer* c = &newCust;
cvect.push_back(c);
}
}
for (unsigned int loop = 0; loop < cvect.size(); loop++)
{
cout << cvect[loop];
}
当我尝试打印客户详细信息时,会打印出空白行。如何正确取消引用ptr_vector?
答案 0 :(得分:2)
Boost指针容器用于拥有动态分配对象的容器。所以要按预期使用它,你可以这样做:
while (cDbase >> newCust) {
cvect.push_back(new Customer(newCust));
}
(注:never loop on eof()
)。
但是,你真的需要动态存储它们吗?怎么样这个:
std::vector<Customer> cvect;
ifstream cDbase("datafiles/customers.txt");
while (cDbase >> newCust) {
cvect.push_back(newCust);
}
答案 1 :(得分:0)
如果newCust
是局部变量,则将指向局部变量的指针推送到不起作用的向量中。
相反,您必须每次通过循环创建一个新对象。一个简单的解决方案看起来像这样:
while (cDbase >> newCust)
cvect.push_back(new Customer(newCust));
这可能需要你有一个合适的拷贝构造函数。