I want to set my function with class object parameter set as default. But when I try to do that it fails in compilation.
class base {
// ...
};
int myfunc(int a, base b = NULL) {
if (NULL = b) {
// DO SOMETHING
} else {
// DO SOMETHING
}
}
Here when i am trying to compile it, this gives me error that "Default Argument base b have int type"
Objects can't be NULL
in C++.
To set the parameter to default, just use:
int myfunc(int a, base b = base())
You have three obvious options here.
First, use overloads so the caller can choose to pass b
or not.
int myfunc(int a) { ... }
int myfunc(int a, base& b) { ... }
This way you can pass b
without having to use a pointer. Note that you should make b
a reference or pointer type to avoid slicing the object.
Secondly, if you don't want 2 separate implementations, make b
a pointer, which can be set to NULL
.
int myfunc(int a, base* b = NULL) { ... }
Third, you could use something to encapsulate the concept of nullable, such as boost::optional
.
int myfunc(int a, boost::optional<base&> b = boost::optional<base&>()) { ... }
@tenfour answer forgot to mention another possible way. You also define a global variable object which you can construct as you like, then set it as the default value:
#include <iostream>
class MyCustomClassType
{
int var;
friend std::ostream &operator<<(
std::ostream &output, const MyCustomClassType &my_custom_class_type )
{
output << my_custom_class_type.var;
return output;
}
};
// C++11 syntax initialization call to the default constructor
MyCustomClassType _my_custom_class_type{};
void function(MyCustomClassType my_custom_class_type = _my_custom_class_type) {
std::cout << my_custom_class_type << std::endl;
}
/**
* To build it use:
* g++ -std=c++11 main.cpp -o main
*/
int main (int argc, char *argv[]) {
function();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With