I am using this pretty simple class without using any inheritance.
class A
{
int a;
int b;
public:
A(int x, int y) { a = x; b = y;}
A() :A(0,0){};
~A(){};
} ;
int main ()
{
A a1, a2(5, 7) ;
}
I get this error.
error C2614: 'A' : illegal member initialization: 'A' is not a base or member
There are similar questions on SO but they relate to inheritance. Can someone explain the reason and what does standard say about that?
EDIT:
It would be better if someone elaborate more on the forwarding constructor and this feature in C++11.
If you can use C++11, you could initialize A()
from A(int, int)
. This is not possible in C++03, where you have to write two separate constructors.
If you want your code to work in C++03, you have two options:
init(int, int)
and call it from each of your constructors. This is a good choice if your constructor does a lot of work.You can also call a base constructor from a child class constructor. For instance, if you have
class A {
A(int, int);
};
class B : public A {
B(int, int);
};
You could write
B::B(int x, int y) : A(x,y) {}
This is what your compiler means when it says that A is not a base
, it is expecting this situation.
All of these are compatible with C++03.
You could also upgrade your compiler to support C++11 features. I wouldn't recommend this if you are working in Linux and want your project to compile in Windows because Windows compilers don't implement all the C++ features that Linux compilers do (unless you pay for a good compiler).
that's because of your problem with the constructor at :
From the looks of your error message, I am assuming you're on Visual Studio (probably 2010) and I agree, it doesn't work in VS2010.
A:A(0,0){ }
Fix for VS 2010 and its predecessors: A():a(0),b(0){}
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