如何打印出结构指针?

时间:2017-04-14 12:27:04

标签: c++ pointers struct

我试图打印出我在函数内部创建的结构,因为这些结构必须在我使用指针的函数之外可用。我在头文件中声明了这样的结构和函数:

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

}

我已经创建了另一个打印出struct(重载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;
}

但是当我在main()中调用函数时,它没有打印任何内容,我收到一条错误消息:

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

这是做正确的方法吗?

1 个答案:

答案 0 :(得分:0)

首先,在函数中声明变量Car * AstonMartin。该变量在makeCars函数中实际存在 ONLY

你不能使用你的对象甚至删除它

更好的方法是

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);
}

永远不要在函数中声明的变量不能在其他函数中使用。要在任何地方使用变量,您需要声明一个全局变量,但在这种情况下,不必仅声明Car *并将其作为参数提供给函数