我想让一个类成员成为另一个类的实例.但我得到一个警告"警告C4458:声明'x'隐藏类成员"并且代码不起作用.
class Ca {
int va = 5;
public:
Ca();
int getVa(void);
};
int Ca::getVa(void) {
return va;
};
class Cb {
Ca x;
public:
Cb();
int getCa(void);
};
Cb::Cb(void) {
Ca x; // instanciate Ca
}
int Cb::getCa(void) {
return x.getVa();
}
int main()
{
Cb cb; // instanciate Cb
int i = cb.getCa();
cout << "va = " << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这个警告,请有人解释一下吗?
警告在这一行:
Cb::Cb(void) {
Ca x; // <<== Here
}
Run Code Online (Sandbox Code Playgroud)
问题是这Ca x是一个与成员变量无关的局部变量x.
如果您只需要调用默认构造函数进行初始化x,则无需执行任何操作:C++将自动为您执行此操作.如果您想将一些参数传递给Ca构造函数,请使用初始化列表:
Cb::Cb(int argForAsConstructor) : x(argForAsConstructor) {
// Empty body
}
Run Code Online (Sandbox Code Playgroud)
冒号后的构造允许您初始化没有默认构造函数的成员变量.