c++ - 调用 C++ 构造函数问题

标签 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;
}

最佳答案

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/

相关文章:

c++ - 删除指向 vector 的指针

子类中的 Java 静态构造函数访问

C# - 初始化程序中类字段的闭包?

c# - 在构造函数中声明的 C# 对象的垃圾收集

c++ - 为什么我可以在方法中使用 'this'

c++ - 使用 C++ REST SDK Casablanca 发送 HTTP POST 请求以更新文件内容

c++ - QList<T>::at: "index out of range"中的 qt ASSERT 失败

c++ - 如何提供许多构造函数,但又没有太多依赖?

Java Lombok : Omitting one field in @AllArgsConstructor?

C++类模板特化问题