删除指向指针的向量指针时出错

时间:2013-04-22 00:01:40

标签: c++ std

您对此功能有何看法?

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

我一直收到以下错误:

  • test.cpp:在成员函数'void Koala :: ListAddressAction :: deleteVector(std :: vector&gt; *)':

  • test.cpp:160:错误:输入'class std :: vector&gt;'赋予'删除'的参数,预期指针 test.cpp:在成员函数'virtual void Koala :: ListAddressAction :: execute()':

  • test.cpp:176:错误:没有匹配函数来调用'Koala :: ListAddressAction :: deleteVector(std :: vector&gt; *&amp;)'

  • test.cpp:157:注意:候选人是:void Koala :: ListAddressAction :: deleteVector(std :: vector&gt; *)

我认为这是因为我从[]运算符中获取了一个引用...但我不知道如何解决它......

谢谢...

2 个答案:

答案 0 :(得分:2)

v是一个指针,因此在使用下标运算符之前,您需要取消引用它:

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

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

delete v->operator[](i);

答案 1 :(得分:0)

v是您传入的指针。当您执行v[i]时,您正在访问i vector。真的,你只有一个向量,你想要delete它的元素。为此,首先取消引用指针:

delete (*v)[i];