C++ 默认构造函数缺失,我无法编译

标签 c++ default-constructor

我有这个非常简单的类

class myclass {

public:
    int id;
    double x, y, z;

    myclass() = default; // If I omit this line I get an error
    myclass(int ID, double X, double Y, double Z): id(ID), x(X), y(Y), z(Z) {};
};

如果我省略 myclass() = default; 行,然后尝试创建一个对象

#include <vector>
using namespace std;
int main() {

    int ID = 0;
    double X = 1.0, Y = 2.0, Z = 3.0;
    vector<myclass> a_vector(10);

    myclass an_object(ID,X,Y,Z);

    return 0;
}

我得到一个错误no matching function for call to ‘myclass::myclass()

为什么会这样?什么时候强制指定不带参数的构造函数为默认值?

这可能是一个非常简单的问题,但关于构造函数的其他问题似乎针对构造函数的非常具体的问题,所以我认为这可能是值得的。

最佳答案

一旦您提供了任何构造函数,编译器就会停止为您提供其他构造函数 - 您将完全掌控一切。因此,当您有一个接受一些参数的人时,不再提供不接受任何参数的人。

关于C++ 默认构造函数缺失,我无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820235/

相关文章:

c++ - OpenCV 画圆圈跟踪球问题

c++ - 在 C++ 中转换正确的方法

c++ - 如何在 C++ 中调用另一个函数内部的函数?

c++ - 如何确定用空大括号初始化程序调用的构造函数?

java - 在没有默认 POJO 构造函数的情况下将 POJO 转换为 XML

c++ - 下面显示的片段在 Coliru 和 Ideone 中编译,但根据 iso § 8.5 p6 它不应该,或者我错过了什么?

c++ - 实现计数排序

c++ - ns3中udp连接的吞吐量计算

c++ - 我应该使用指向 OOP 对象的指针还是应该创建默认构造函数?

c++ - std::string 的默认构造函数是 no-throw 吗?