0

你觉得这个功能怎么样?

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 >*)'中:

  • test.cpp:160: 错误: 类型 'class std::vector >' 参数赋予'delete',预期指针 test.cpp: 在成员函数'virtual void Koala::ListAddressAction::execute()'中:

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

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

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

谢谢...

4

2 回答 2

2

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

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

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

delete v->operator[](i);
于 2013-04-22T00:03:23.183 回答
0

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

delete (*v)[i];
于 2013-04-22T00:03:37.133 回答