我严重误解了 C++ 构造函数。在下面显示的代码中,我试图在 MyClass1 中初始化 aVar。该代码生成以下错误(也显示在代码中):
(1) "aVar2"已经在当前范围内声明
(2) 引用变量“var”需要初始化
有人能给我指出正确的方向吗。
谢谢。
class Myclass1
{
public:
Myclass1(int * var1);
Myclass1(void);
private:
int * aVar;
};
class Myclass2
{
public:
Myclass2(int * var2);
private:
Myclass1 myclass1;
};
class Myclass3
{
public:
Myclass3(void);
private:
Myclass2 myclass2;
int var;
};
Myclass1::Myclass1(int * aVar1)
{
aVar = aVar1;
}
Myclass2::Myclass2(int * aVar2)
{
//ERROR: "aVar2" has already been declared in the current scope
Myclass1(aVar2);
}
Myclass3::Myclass3(void)
{
var = 2;
//ERROR: reference variable "var" requires an initializer
Myclass2(&var);
}
int main(void)
{
Myclass3 myFinalClass;
return 0;
}
最佳答案
Myclass1(aVar2);
不对,因为成员变量名称是 myclass1
并且您必须像这样分配给它:myclass1 = aVar2
。此处编译器认为您只是试图创建一个与参数同名的新 Myclass1
对象。这是您需要的:
Myclass2::Myclass2(int * aVar2) : myclass1(aVar2) { }
Myclass3::Myclass3() : myclass2(&var) { }
知道初始化列表总是比在构造函数体中初始化成员要好;见the C++ FAQ on this .除了提供统一的语法外,它可能也更快。所以你的 Myclass1
构造函数在这种形式下会更好:
Myclass1::Myclass1(int * aVar1) : aVar(aVar1) { }
关于c++ - 调用 C++ 构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106574/