私はVECと呼ばれるカスタムベクトルクラスと、VECと呼ばれるVECのstd :: vectorを保持するDataクラスというクラスを持っています.VECは4つの値を格納する非常に単純なベクトルとして機能します。関数終了後にベクトルデータが消える
vector<VEC> v;
他にも、2つの機能があります。プロセスと作成。私のprocess()は、Dataオブジェクトをパラメータとして受け入れ、その内容を変更することになっています。
VEC v1(1, 1, 1, 1);
VEC v2(2, 2, 2, 2);
VEC v3(3, 3, 3, 3);
vector<VEC> temp;
temp.push_back(v1);
temp.push_back(v2);
temp.push_back(v3);
for (int i = 0; i < 3; i++)
{
data.v.push_back(vtemp[i]);
}
cout << data.v.size() << endl;
あなたが期待するように、これは3
を出力:この関数内void myClass::process(Data data);
は、私がvecSのの一時的なベクトルを作成すると、それはデータのVに内容をだ押し込み宣言されています
ここで問題が発生します。もう1つの関数create()は、ベクトルデータリスト内のすべてのDataオブジェクトに対してprocess()を呼び出します。テスト目的のために、これは最初の要素のみを使用します。これは、あなたが見ることができるように、それはプロセス()関数で正しく動作しますが、Vベクトルは、その関数が終了するとすぐに自分自身を空にするようで、
3
0
プリントアウトするものです
void myClass::create() {
process(dataList[0]);
cout << dataList[0].v.size() << endl;
}
。これは問題です。なぜなら、process()が呼び出された後で新しいDataオブジェクトを保存するためには、各Dataオブジェクトが必要になるからです。何が起きてる?
あなたは 'Data'のコピーで動作しているようです。それを変更する場合は、参照で引数を取ってください。 – krzaq