I am trying to have a class that allows implicit casting to certain built in types, like unsigned long int and since I\'m trying to do this as correct as possible (this is my fi
The function signature does not match the function definition.
operator unsigned long int () const;
and
CustomizedInt::operator unsigned long() { ... }
^^^
const missing
In this case you should mark the conversion operator as const
since it doesn't affect the internal state of the object.
Also, use constructor initialization lists to initialize your member variables.
CustomizedInt::CustomizedInt()
: data()
{
}
CustomizedInt::CustomizedInt(int input)
: data(input)
{
}
Yes, if your member function doesn't affect the logical state of the object, then you should indeed postfix it with const
, so that the compiler will enforce that.
But in that case, you also need to add const
when you define the function body!
You just need to copy the same function prototype into the implementation. ie.
CustomizedInt::operator unsigned long int() const
You could remove the const
from the declaration, but what you almost certainly want to do is add it to the definition:
CustomizedInt::operator unsigned long() const
{
unsigned long int output;
output = (unsigned long int)data;
return output;
}