0
Error: uninitialized const member in constructor
When I run the program, it notifies: ..\Playground\: In constructor 'MyClass::MyClass()': ..\Playground\:15:1: error: uninitialized const member in 'const int' [-fpermissive] MyClass::MyClass() ^~~~~~~ ..\Playground\:12:14: note: 'const int MyClass::constVar' should be initialized const int constVar; I want to know, Why did this program come to this error? I removed constructor: MyClass::MyClass() then the program runs normally. Please see more: https://code.sololearn.com/ctCTbkR7IW0R/#cpp
6 ответов
+ 4
You've declared constVar as a constant member variable, but you haven't set it during initialisation. As it can't be set later, as it's constant, the compiler complains.
const int constVar = 5;
OR
int constVar
will solve your problem. Although I imagine you want the former.
+ 4
To try to answer the question, I suppose it was because MyClass() constructor doesn't provide any means to initialize the "constVar" constant member, while we know clearly that a constant needs to be initialized, see here (constructor initializer chapter):
https://www.sololearn.com/learn/CPlusPlus/1896/
On the other hand, the MyClass(int a, int b) has constructor initializer that assigns a value for "constVar" constant, which prevents the "uninitialized constant" error from happening, because the constant is being initialized in there.
It would be better to have the constant initialized if the MyClass() constructor is used (e.g. const int constVar = 5), or you can add constructor initializer in MyClass() just to initialize the constant, as follows:
MyClass::MyClass()
: constVar(constDefVal)
{
cout << "Constructor" << endl;
}
Where "constDefVal" is the value you want to initialize constVar constant with, you decide the default value, as that constructor accepts no argument.
I hope I explained it right, if I was mistaken please correct me, so I can fix the answer : )
Hth, cmiiw
+ 2
Yes, thanks for your answer.
I know that, but I want to know exactly why is it reporting an error when I declared constructor MyClass();
Because if I don't declared the constructor, only MyClass::MyClass(int a, int b) then it runs normally.
+ 2
Hi Ipang,
Thanks a lot.
I understand that this error is occurred becasue if constructor MyClass::MyClass() is used then program it see constVar is not initilized.
I am clear.
+ 2
@ThiemTD, You're welcome, glad if it helps : )
0
Ipang Great answer ☺ You have a knack for explaining things clearly.