I am having kind of a trouble adapting a program from C# to C . It's very commom given a class to assign it the null value. But C is not accepting the equivalent form 'nullptr'
class Point{
public:
int x,y;
}
//...
Point p = nullptr;
There is some way of solving it?
CodePudding user response:
The problem is that p
is a non-pointer type in your example. This means that it cannot be initialized with a nullptr
. The type of p
is Point
.
You can make p
a pointer to a Point
so that you can initialize it with a nullptr
as shown below:
Point *p = nullptr; //p is a pointer to non-const Point object
Or
If you want to create an object of the class type Point
then one way of doing so is as follows:
Point p{1, 3};
I would also recommend referring to a good C book for a better understanding of the concept.
CodePudding user response:
You cannot assign nullptr
to a class because a class is a type and not a variable. What you're doing by typing Point p = nullptr;
is that you're asking the compiler to find a constructor of Point
which accepts a nullptr
.
You can either create an object of Point
as an automatic variable by doing this:
Point p = Point{1, 2}; // sets x = 2 and y = 3
or simply like this:
Point p;
for which however you will need to define a constructor which initializes x
and y
because you haven't provided the member variables with default values.
Depending on the context in which this statement resides, p
will either be allocated on the heap or on the stack. In case you're instantiating p
in the main function, it will be the latter.
You can create a pointer to an object of Point
by doing this:
Point* p = nullptr;
However, you will only have created a pointer. You will need to further take care of allocation, which you can do like this:
Point* p = new Point{1, 2};
in which case you should also free the allocated memory before your program ends like so:
delete p;