Cod*_*ash 5 c++ oop constructor member-initialization
我使用这个非常简单的类而不使用任何继承.
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) ;
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误.
错误C2614:'A':非法成员初始化:'A'不是基础或成员
SO上也有类似的问题,但它们与继承有关.有人可以解释原因以及标准对此有何看法?
编辑:
如果有人在C++ 11中详细说明了转发构造函数和这个特性,那会更好.
如果你可以使用C++ 11,你可以初始化A()的A(int, int).这在C++ 03中是不可能的,在C++ 03中你必须编写两个单独的构造函数.
如果您希望代码在C++ 03中工作,您有两种选择:
init(int, int)并从每个构造函数中调用它.如果你的构造函数做了很多工作,这是一个很好的选择.您还可以从子类构造函数中调用基础构造函数.例如,如果你有
class A {
A(int, int);
};
class B : public A {
B(int, int);
};
Run Code Online (Sandbox Code Playgroud)
你可以写
B::B(int x, int y) : A(x,y) {}
Run Code Online (Sandbox Code Playgroud)
这就是你的编译器所说的那样A is not a base,它正在期待这种情况.
所有这些都与C++ 03兼容.
您还可以升级编译器以支持C++ 11功能.如果您在Linux中工作并希望您的项目在Windows中编译,我不建议这样做,因为Windows编译器没有实现Linux编译器所做的所有C++功能(除非您为一个好的编译器付费).