繁体   English   中英

为什么我的课程只能与两个构造函数一起使用c ++

[英]why does my class only work with two constructors c++

这行不通

当我的班级中没有空白的构造函数时,代码将不会运行,并导致错误,指出该类不存在默认构造函数。

#include <iostream>

class myClass
{
public:
    myClass(int val)
        :x(val)
    {}


private:
    int x;
};

int main()
{
    myClass random;
    return 0;
}

这有效

#include <iostream>

class myClass
{
public:
    myClass(int val)
        :x(val)
    {}

    myClass()
    {}

private:
    int x;
};

int main()
{
    myClass random;
    return 0;
}

这是因为当您尝试实例化对象myClass random ,您正在尝试调用没有的默认构造函数。

如果将其更改为myClass random(3) (基本上是尝试调用您拥有的构造函数),则会看到编译器不会有问题。

如果要让myClass random可以正常编译,则您的类中必须具有默认构造函数。

class (任何构造函数)中声明构造函数后,编译器将不会自动为您生成默认构造函数(这就是您所称的空白构造函数)。

如果您不想实现默认的构造函数(如果只希望使用默认行为,通常是个好主意),则可以告诉编译器从C ++ 11开始为您生成它。

class myClass {
public:
    myClass(int val)
        :x(val)
    {}

    myClass() = default; // the compiler handles the implementation

private:
    int x;
};

在第一种情况下,您已经定义了一个参数化的构造函数。 定义构造函数后,编译器现在不会像以前那样自动定义默认构造函数。

如果未定义构造函数,则编译器会自动定义一个默认构造函数,但如果定义了另一个构造函数,则编译器将不会这样做。

即在第一种情况下,默认构造函数不存在。 在第二种情况下,您已经定义了一个,因此没有错误。

请参阅默认构造函数

如果没有为类类型提供任何用户声明的构造函数,则编译器将始终将默认构造函数声明为其类的内联公共成员。

但是,您的类中声明了一个构造函数,因此编译器不会声明默认构造函数。 您必须自己明确声明一个人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM