2017-04-14 6 views
-3

Ich versuche, Strukturen auszudrucken, die ich innerhalb einer Funktion gemacht habe, und da diese außerhalb der Funktion verfügbar sein müssen, habe ich Zeiger verwendet. Ich habe die Struktur und Funktionen wie diese in der Header-Datei deklariert:Wie man einen Strukturzeiger ausgibt?

struct Car{ 
double wheelDiam; 
int numberOfWheels; 
string brand; 
}; 

void makeCars(); 

ostream & operator<<(ostream & out, const Car & elem); 
void printCar(Car car); 

Die Funktion, die die Autos macht sieht wie folgt aus:

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"; 

} 

und ich eine andere Funktion haben, dass die Struktur ausdruckt (überladenen Operator =):

ostream & operator<<(ostream & out, const Car & elem){ 
    out << elem.brand<<" "<<elem.numberOfWheels <<" "<<elem.wheelDiam<<endl; 
    return out; 
} 

void printCar(Car car){ 
    cout << car << endl; 
} 

aber wenn ich rufe die Funktionen in main() er nichts auszudrucken und ich erhalte eine Fehlermeldung:

int main(){ 
makeCars(); 
printCar(*AstonMartin); 
return 0 
} 

was ist der richtige Weg, dies zu tun?

+1

Ich denke, Sie müssen einige der Grundlagen aktualisieren. Zunächst einmal ist AstonMartin eine lokale Variable für die Funktion makeCars(), die in main nicht verfügbar ist. Zweitens, du erschaffst keine Objekte: "Auto * AstonMartin" deklariert nur einen Zeiger, aber macht kein "neues Auto". Schließlich müssten Sie auch dann die Objekte löschen, wenn Sie dies getan hätten. – CompuChip

+0

Sie sollten eine gute aus [Das Buch und die Liste der endgültigen C++ - Bücher] (http://stackoverflow.com/questions/388242/the-definitive-c) auswählen -Buchführer-und-Liste). – molbdnilo

Antwort

0

Zunächst deklarieren Sie die Variable Car * AstonMartin in einer Funktion. Diese Variable existiert tatsächlich ONLY in der makeCars-Funktion.

Sie können nicht Ihr Objekt oder sogar löschen

einen besseren Weg zu tun ist,

void setCarAttributes(Car *c) 
{ 
    // set everything for you car 
    c->setBrand("Aston Martin"); 
    // etc ... 
} 

void printCar() 
{ 
    // print what you want 

}

int main() 
{ 
    Car *AstonMartin = new Car(); 
    setCarAttributes(AstonMartin); 
    printCar(AstomMartin); 
} 

vergiss die Variable, die Sie in Ihren Funktionen erklären können‘ t in anderen Funktionen verwendet werden. Um eine Variable überall zu verwenden, müssen Sie eine globale Variable deklarieren, aber in diesem Fall ist es nicht notwendig, einfach ein Auto * zu deklarieren und es als Parameter Ihren Funktionen zu geben.

Verwandte Themen