私はCarオブジェクトのベクトルを持っています。
vector<Car> vCars
私の関数の1つで、ベクトルの最初の要素を消去する必要があります。簡単そうに聞こえますか?エラーをスローしている行:
vCars.erase( vCars.begin() );
そしてエラー:
no matching function for call to 'std::vector<Car>::erase(std::vector<Car>::const_iterator) const'
私は、eraseは通常、そのパラメーターに対してイテレーターのみを使用し、const_iteratorは使用しないことを理解しています。消去-削除のイディオムなど、エラーの解決策や回避策を探していましたが、位置ごとに削除する必要がある場合は、値ごとに要素を削除するだけです。最初の位置にある要素だけです!(これはベクトルのパフォーマンスとしては良くないことはわかっていますが、これにはベクトルを使用する必要があります)
編集:状況を明確にするために、呼び出しが含まれている関数は以下のとおりです。
/// Removes the Car at the front of the garage without returning the instance.
void Garage::pop() const {
if ( !empty() ) {
vCars.erase( vCars.begin() );
}
}
編集:そして、私は今、どこが間違っていたのかがわかります。constであるメソッドはたくさんあり、私はうっかりしてpop()をconstメソッドにしました!constを削除すると、問題は解決しました。私を正しい方向に向けてくれてありがとう!