1

I'm still in the process of grasping pointers and in doing so wrote a quick meaningless program in order to practice finding pointer errors. I'm confused as to why this sample code is crashing:

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

I know there are better ways to go about things, like I said this is just practice for me to get used to pointers and why crashes occur. Any help is appreciated.

2
  • Why does your constructor take in a VehiclePart* if you're going to be calling new from the constructor? Commented May 28, 2016 at 3:06
  • 1
    You need to follow good naming convention to make your code readable: like not capitalizing variable names(first letter), or using underscore for member variables, like vehiclePart_ Commented May 28, 2016 at 3:29

1 Answer 1

2
Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber)
{

Notice that your constructor has a parameter named vehiclePart. Therefore,

    vehiclePart = new VehiclePart(VehiclePartNumber);

This ends up setting the constructor's parameter to the newed class instance, instead of the class member of the same name.

This has nothing to do with pointers, but with scoping.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.