我仍然在抓住指针的过程中并且这样做了一个快速无意义的程序,以便练习查找指针错误。我很困惑为什么这个示例代码崩溃了:
#include <iostream>
class VehiclePart
{
public:
VehiclePart(int);
int GetVehiclePartNumber();
private:
int partNumber;
};
VehiclePart::VehiclePart(int VehiclePartNumber)
{
partNumber = VehiclePartNumber;
}
int VehiclePart::GetVehiclePartNumber()
{
return partNumber;
}
class Vehicle
{
public:
Vehicle(VehiclePart* VehiclePart, int VehiclePartNumber);
int GetVehiclePartNumber();
private:
VehiclePart* vehiclePart;
};
Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{
vehiclePart = new VehiclePart(VehiclePartNumber);
}
int Vehicle::GetVehiclePartNumber()
{
return vehiclePart->GetVehiclePartNumber();
}
int main()
{
VehiclePart* hood = nullptr;
Vehicle car(hood, 6);
std::cout << "Hello" << std::endl;
std::cout << car.GetVehiclePartNumber();
return 0;
}
我知道有更好的方法可以解决问题,就像我说这只是练习让我习惯指针以及为什么会发生崩溃。任何帮助表示赞赏。
答案 0 :(得分:2)
Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{
请注意,您的构造函数有一个名为vehiclePart
的参数。因此,
vehiclePart = new VehiclePart(VehiclePartNumber);
这最终将构造函数的参数设置为new
ed类实例,而不是同名的类成员。
这与指针无关,但与范围有关。