クラス Vehicle のコピー コンストラクターを作成していますが、クラスがこのコンストラクターに持つ配列にアクセスできません。ドット表記 (vehi.vin) を使用して他の値を設定すると、期待どおりに正常に動作します。そこで、同じアイデア vehi.accessories[0] を使用して配列にアクセスしようとしましたが、実際に存在する文字列ではなく null 値を返すようです。そして、最初にクラスを初期化したときに、この配列に適切な値が含まれていることがわかります。これは、それらを出力できるためです。私の質問は、クラスから配列にアクセスするにはどうすればよいですか? ドット表記の使い方が間違っていますか? 配列にドット表記を使用できませんか? get メソッドだけが必要ですか?
コード -
車両.cpp
Vehicle::Vehicle(const Vehicle& vehi)
{
//get values and set them equal to the local object's attributes
vin = vehi.vin;
for(int i = 0; i < vehi.numAccessories; i++)
{
//cout << "get here\n";
accessories[i] = vehi.accessories[i];
cout << accessories[i] << " " << vehi.accessories[i] << endl;
}
}
アクセサリーがその価値を得る方法:
for(int i = 0; i < numAccessories; i++) //loop through file until all accessories for the car have been put into the array
{
getline(fin, accessories[i]); //put accessory in the next spot in the accessory array
cout << "Accessory " << (i+1) << ": " << accessories[i] << endl;
}
Vehicle オブジェクトの main.cpp 宣言。コンストラクターは、渡されたファイル オブジェクトを使用して値を読み取ります。
Vehicle temp(fin);
vehicle.h
private:
string accessories[50]; //array of accessories stored in string form
編集: コピー コンストラクターを直接呼び出そうとすると正常に動作しますが、printVehicle() 関数を呼び出すと、そこに到達したように見えますが、何らかの形で失敗します。以下のコードは私が望むことを実行し、コピー コンストラクターが正常に動作することを示しているので、printVehicle() から呼び出される方法だと思います。
main.cpp:
Vehicle test(fin);
test.startAcc();
cout << endl << test.nextAcc() << endl;
Vehicle test2(test);
test2.startAcc();
cout << endl << test2.nextAcc() << endl;