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

Thr*_*iag 0 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) {};
};
Run Code Online (Sandbox Code Playgroud)

如果我省略了该行的行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;
}
Run Code Online (Sandbox Code Playgroud)

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

为什么会这样?什么时候必须指定没有参数的构造函数作为默认值?

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

Rei*_*ica 6

一旦你提供了任何构造函数,编译器就会停止为你提供其他构造函数 - 你就完全可以控制了.因此,如果您有一个带有一些参数的参数,则不再提供不带参数的参数.

  • @ThreeDiag因为这就是C++的设计方式.IOW,你对这个问题有什么其他答案?这是设计,还有什么可说的...... (2认同)
  • 但需要明确的是,除非您确实需要将类设置为默认构造,否则绝对不需要存在默认构造函数.在OP的`main()`函数中使用该类不需要任何默认构造函数. (2认同)