调用C ++构造函数问题

时间:2015-10-13 15:23:32

标签: c++ constructor

我严重误解了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;
}

2 个答案:

答案 0 :(得分:1)

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) { }

答案 1 :(得分:0)

Myclass1(aVar2)不是构造函数调用,它是aVar2对象的定义。