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渡すポインタです。そうすると、 thv[i]にアクセスしています。本当に、ベクトルは 1 つしかなく、その要素が必要です。これを行うには、最初にポインターを逆参照します。ivectordelete

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