#C++でvectorを関数に参照渡しをする
Box.hpp
/* 中略 */
void Hotaru::hitBox(vector<Box> box, int index) {
for (int i = 0; i < box.size(); i++) {
if (index == i) {
box.erase(box.begin() + i);
}
}
}
静的配列なら配列名を渡すとメモリ上の配列の先頭アドレスを渡します。
なので関数で値を変更すると本体の配列の値も変更されます。
vectorでも同じなのだろうと思い上記のコードを実行して見ると、boxを渡した元の関数内では値が変更されませんでした。
どうやらboxの値の変更を呼びたし元に反映させるには参照渡しを使うべきだそうです。
実際のコードが以下の通りです(1文字しか変わっていませんが)
Box.cpp
/* 中略 */
void Hotaru::hitBox(vector<Box>& box, int index) {
for (int i = 0; i < box.size(); i++) {
if (index == i) {
box.erase(box.begin() + i);
}
}
}
引数の部分を
vector<Box>& box
に変更します。
C++の「参照渡し」を使います
こうすることで関数内の変更が呼び出し元のvector自体にも反映されます。
C++のポインタ、参照渡し、値渡しについてはこちらの方が詳しく説明してくださっていたので載せておきたいと思います
C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう