2016-11-02 11 views
0

オブジェクトのポインタの配列にオブジェクトを追加することに問題があります。ここで私が話しすることがあります機能です:オブジェクトへのポインタの配列へのオブジェクトの追加

void add(Car **cars, int number) { 
    Car *fresh = new Car; 
    fresh = new Car; 
    cout << "Enter the name of your car." << endl; 
    cin >> fresh->name; 
    cout << "Enter max velocity of your car." << endl; 
    cin >> fresh->maxV; 
    cout << "Enter weight of your car." << endl; 
    cin >> fresh->weight; 
    delete[number-1] cars; 
    cars[number-1] = fresh; // here's something wrong 
} 

私はポインタ**carsの配列にnumber -of車のためのメモリを割り当てられ、その後、私はまず、最後にメモリを削除、配列の末尾に新しいオブジェクトfreshを追加しようオブジェクトのポインタの配列のインデックスを返し、配列の最後のインデックスに参照を渡しますが、エラーが発生します。私はウェブで似たような話題を見つけなかったので、自分自身で問題を解決しようとしました。誰かが私にそれを解決する方法を教えてくれることを願っています。手伝ってくれてありがとう。

+0

ここでエラーが発生していますか? 'new Car'は無効な構文のようです。 –

+0

関数の最後の行に 'cars'配列の 'number-1'インデックスに 'fresh'の参照を渡そうとするとエラーになります。 – BlackHawk

+0

ポインタを渡す前に 'malloc'車を使いましたか? –

答えて

-1

あなたが

std::vector<Car> cars; 

を使用するのであれば、あなたは次の操作を行うことができ、より良いかもしれない:

cars.push_back(fresh); 

そして、それがすべてです。私の英語については申し訳ありません

+0

'Car'がPlainOldData型オブジェクトでない場合は複雑 – infixed

0

削除の必要はありません。あなたがすでに 'cars'のためにメモリを割り当てていた場合、コードはこのようになります。

Car *fresh = new Car; 
cars[number-1] = fresh; //number here should be index starting from 1 not number of Car objects 

車は、メソッドadd()を呼び出す前に次のように初期化されます。あなたがそうでなければcars[number-1]使用

delete cars[number-1]; 

に割り当てられたメモリを削除する必要がある場合

Car ** cars = new (Car *)[number]; 
0

、あなたはfreshを割り当てるために二回newを呼び出す必要はありません。 ので、次は

void add(Car **cars, int number) { 
    Car *fresh = new Car; 

    cout << "Enter the name of your car." << endl; 
    cin >> fresh->name; 

    delete cars[number-1]; 
    cars[number-1] = fresh; 
} 

を動作するはずです、あなたはnumberがあなたの車の配列の大きさであることを確認する必要があります。

関連する問題