我试图测试程序的一部分是否正常工作,但在运行以下代码时,
Car *carList;
carList = (Car*) malloc (length * sizeof(Car));
carList[0].setMake("a");
carList[0].setModel("b");
carList[0].setYear("c");
carList[0].setColor("d");
carList[0].printCar();
程序在第一个函数调用setMake中遇到问题。这是我的汽车等级:
class Car {
private:
string cmake;
string cmodel;
string cyear;
string ccolor;
public:
Car(){};
Car(string *cmake, string *cmodel, string cyear, string *ccolor);
void printCar(){
cout << "Make: " << cmake << endl;
cout << "Model: " << cmodel << endl;
cout << "Year: " << cyear << endl;
cout << "Color: " << ccolor << endl << endl;
return;
};
string getMake(){return cmake;};
string getModel(){return cmodel;};
string getYear(){return cyear;};
string getColor(){return ccolor;};
void setMake(string a){cmake = a;};
void setModel(string a){cmodel = a;};
void setYear(string a){cyear = a;};
void setColor(string a){ccolor = a;};
};
当它试图执行函数setMake时,我得到一个错误,上面写着
No source available for "libstdc++-6!_ZN9__gnu_cxx9free_list8_M_clearEv() at 0x6fc59021"
有人能告诉我我做错了什么吗?提前谢谢。
必须使用new
而不是malloc
,因为C++对象必须使用构造函数调用进行初始化。
在这种特殊情况下,错误是由于未构造的string
对象造成的。
malloc
只分配内存,不初始化C++对象。看起来你想要一个动态大小的Car
集合,所以std::vector<Car>
对你来说会更好:
std::vector<Car> carList (length);
carList[0].setMake("a"); //assuming length>0
carList[0].setModel("b");
carList[0].setYear("c");
carList[0].setColor("d");
carList[0].printCar();
这将创建一个length
大小的std::vector
默认初始化的Car
s,然后在矢量中的第一个对象上设置请求的属性并打印它