-3
私は関数内で作った構造体を出力しようとしています。これらはポインタを使った関数の外で利用可能でなければならないからです。私は、ヘッダファイル内でこのような構造体と関数を宣言した:構造体ポインタを出力するには?
struct Car{
double wheelDiam;
int numberOfWheels;
string brand;
};
void makeCars();
ostream & operator<<(ostream & out, const Car & elem);
void printCar(Car car);
車を作る機能は次のようになります。私は構造体をプリントアウト別の関数を(作った
void makeCars(){
Car *AstonMartin;
Car *Volvo;
Car *Audi;
Audi->numberOfWheels = 4;
Audi->wheelDiam = 20.0;
Audi->brand = "Audi";
Volvo->numberOfWheels = 4;
Volvo->wheelDiam = 23.0;
Volvo->brand = "Volvo";
AstonMartin->numberOfWheels = 5;
AstonMartin->wheelDiam = 25.0;
AstonMartin->brand = "Aston Martin";
}
とオーバーロードされた演算子=):
ostream & operator<<(ostream & out, const Car & elem){
out << elem.brand<<" "<<elem.numberOfWheels <<" "<<elem.wheelDiam<<endl;
return out;
}
void printCar(Car car){
cout << car << endl;
}
が、私がメインで関数を呼び出すとき()、それは何も印刷されないと、私はエラーメッセージを取得:
をint main(){
makeCars();
printCar(*AstonMartin);
return 0
}
これを行う正しい方法は何ですか?
基本の一部をリフレッシュする必要があると思います。まず、AstonMartinはmakeCars()関数のローカル変数です。メインでは使用できません。第2に、あなたはオブジェクトを作成していません。 'Car * AstonMartin'はポインタを宣言しただけですが、実際には' new car'を作成しません。最後に、たとえあなたがしたとしても、オブジェクトを削除する必要があります。 – CompuChip
[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c)から良いものを選んでください。 -book-guide-and-list)を参照してください。 – molbdnilo