为什么第二个构造函数会影响第一个?
class RC2{
private;
bool keyset;
public:
RC2(uint32_t t1 = 64){
keyset = false;
}
RC2(const std::string KEY, uint32_t t1 = 64){
RC2(t1);
//setkey(KEY);
}
};
给了我:
error: declaration of 'RC2 t1' shadows a parameter
我认为编译器无法搞清楚这些
之间的区别我正在使用带有C ++ 0x的代码块gcc
答案 0 :(得分:9)
因为RC2(t1);
是局部变量声明阴影参数t1
,而不是对其他构造函数的调用。以下代码也有效:
int main(int argc,char* args[])
{
int(a);
a = 2;
return a;
}
请注意!在C ++ 11之前,没有办法从C ++中的构造函数调用同一个类上的另一个构造函数。如果您使用的是旧的C ++版本,请构建一个Init()
- 方法,两个构造函数都会调用它。
答案 1 :(得分:4)
错误不是由构造函数声明触发的。
在第二个构造函数的块中声明类型为t1
的变量RC2
的行上引发错误。此变量隐藏了类似命名的t1
变量,该变量将一个参数传递给构造函数。
我猜你对RC2(t1);
的意图是调用另一个构造函数,但这在C ++中是不可能的。它可以在C ++ 2011中使用,但使用其他语法。