抱歉,我无法粘贴完整的代码,但我会尽力解释问题。我有一个结构向量。我将向量传递给一个函数,该函数用结构填充向量并返回向量。但是当我尝试访问向量元素时,我只得到插入的最后一个元素。我认为问题在于我存储结构的地址,因此向量只保留最后一个值,但我不知道如何纠正这个。
这是我的结构:
struct NA
{ element1;
element2;
};
以下是我在声明后传递矢量的方法:
Vector<NA> del;
func(del);
这是我的函数:(q是一个包含存储过程结果的变量
func(Vector<NA> &dels)
{
NA& del(*new NA);
while(q.nextquery())
{
while(q.nextrow())
{
q.bind(del.element1);
q.bind(del.element2);
dels.insert(&del);
}
return dels.entries()
}
答案 0 :(得分:0)
NA& del(*new NA);
while(q.nextquery())
dels.insert(&del);
显然,您只创建了一个del
对象,但是在同一个向量中多次插入它。最后,所有向量的条目都将指向同一个对象。
您想要的是为向量中的每个条目创建一个新的del
对象。因此,将创建语句放在循环中。
func(Vector<NA> &dels)
{
while(q.nextquery())
{
while(q.nextrow())
{
NA& del(*new NA); // <-- Here
q.bind(del.element1);
q.bind(del.element2);
dels.insert(&del);
}
return dels.entries()
}
答案 1 :(得分:0)
func()
正在将单个指针的多个副本推送到向量中的单个动态分配对象。每个循环迭代都在修改同一个对象,因此向量中的每个条目最终都会指向最后读取的查询记录的数据。
尝试更像这样的东西:
func(Vector<NA> &dels) {
while(q.nextquery()) {
while(q.nextrow()) {
NA *del = new NA;
q.bind(del->element1);
q.bind(del->element2);
dels.insert(del);
}
}
return dels.entries();
}
另一方面,为什么要在向量中存储指针?并使用非标准的矢量类?将实际对象存储到标准std::vector
类中会更安全:
void func(std::vector<NA> &dels) {
while(q.nextquery()) {
while(q.nextrow()) {
NA del;
q.bind(del.element1);
q.bind(del.element2);
dels.push_back(del);
}
}
}