我试图打印出我在函数内部创建的结构,因为这些结构必须在我使用指针的函数之外可用。我在头文件中声明了这样的结构和函数:
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
}
这是做正确的方法吗?
答案 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 *并将其作为参数提供给函数