2013-04-22 89 views
0

您对此函数有什么看法?删除向量指针指针时出错

void deleteVector(vector<Persistent*> *v) { 
    if (v) { 
     for (int i = 0; i < v->size(); i++) 
      delete v[i]; 
     delete v; 
    } 
} 

总是收到以下错误:

  • TEST.CPP:在成员函数 '无效考拉:: ListAddressAction :: deleteVector(标准::矢量> *)':

  • test.cpp:160:error:type'class std :: vector>'argument'delete',expected pointer test.cpp:在成员函数'virtual void Koala :: ListAddressAction :: execute()'中:

  • TEST.CPP:176:错误:调用没有匹配的函数 '考拉:: ListAddressAction :: deleteVector(标准::矢量> * &)'

  • TEST.CPP:157:注意:候选是:无效考拉:: ListAddressAction :: deleteVector(标准::矢量> *)

我想这是因为我碰到[]操作参考...但我不知道如何解决它...

谢谢你...

+0

真正的问题是你真的需要这两个指针吗? – chris 2013-04-22 00:03:04

回答

2

v是一个指针,所以你需要取消对它的引用上使用它的下标运算符之前:

for (int i = 0; i < v->size(); i++) 
    delete (*v)[i]; 
//   ^^^^ 

或者,你可以使用显式运算符的语法:

delete v->operator[](i); 
+0

谢谢!这让我疯狂...... – Andres 2013-04-22 00:46:42

0

v是指针你'通过。当你做v[i]你正在访问ivector。真的,你只有一个矢量,你想要delete其元素。要做到这一点,请首先解析指针:

delete (*v)[i]; 
+0

谢谢!对此,我真的非常感激.. – Andres 2013-04-22 00:55:20