【问题标题】:Practice program crashing when trying to learn pointers尝试学习指针时练习程序崩溃
【发布时间】:2016-05-28 02:56:28
【问题描述】:

我仍在掌握指针的过程中,为此编写了一个快速无意义的程序,以练习查找指针错误。我很困惑为什么这个示例代码会崩溃:

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

我知道有更好的方法来处理事情,就像我说的那样,这只是让我习惯指针以及为什么会发生崩溃的练习。任何帮助表示赞赏。

【问题讨论】:

  • 如果你要从构造函数中调用 new,为什么你的构造函数接受 VehiclePart*
  • 您需要遵循良好的命名约定以使您的代码具有可读性:例如不将变量名(第一个字母)大写,或使用下划线作为成员变量,例如 vehiclePart_

标签: c++ pointers crash


【解决方案1】:
Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{

请注意,您的构造函数有一个名为vehiclePart 的参数。因此,

    vehiclePart = new VehiclePart(VehiclePartNumber);

这最终将构造函数的参数设置为newed 类实例,而不是同名的类成员。

这与指针无关,而是与作用域有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多