Reputation: 183
See the below-given code
#include <iostream>
using namespace std;
class Number
{
int a;
public:
Number();
Number(int num_1) {
a = num_1;
}
void print_number(void) { cout << "Value of a is " << a << endl; }
};
int main()
{
Number num_1(33), num_3;
Number num_2(num_1);
num_2.print_number();
return 0;
}
In the above code, I am having 2 constructors in the same class but when compiling it,gives me the error
ccnd0o9C.o:xx.cpp:(.text+0x30): undefined reference to `Number::Number()'
collect2.exe: error: ld returned 1 exit status
Can anyone solve this problem? and I still need the 2 constructors but without replacing num_3
with num_3()
the main function.
Upvotes: 0
Views: 633
Reputation: 32722
In your class, you have declared the default constructor, but you have not defined it.
You can default
it (since C++11) and you will be good to go:
Number() = default;
Otherwise:
Number() {}
As from @TedLyngmo liked post, both will behave the same, but the class will get different meaning as per the standard, though. More reads here: The new syntax "= default" in C++11
@Jarod42's Comment as side notes: The default constructor make sense when it provide a default value to the member a
. Otherwise it will be uninitialized (indeterminate value) and reading them will cause to UB.
Upvotes: 5
Reputation: 350
Use this code
#include <iostream>
using namespace std;
class Number
{
int a;
public:
Number(){};
Number(int num_1)
{
a = num_1;
}
void print_number(void) { cout << "Value of a is " << a << endl; }
};
int main()
{
Number num_1(33), num_3;
Number num_2(num_1);
num_2.print_number();
return 0;
}
Upvotes: 1