C++ 默认构造函数缺失,我无法编译
C++ default constructors absence and I cannot compile
我有这个很简单class
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()
。
为什么会这样?什么时候强制指定不带参数的构造函数为默认值?
这可能是一个非常简单的问题,但关于构造函数的其他问题似乎针对构造函数的非常具体的问题,所以我认为这可能是值得的。
一旦您提供了任何构造函数,编译器就会停止为您提供其他构造函数 - 您将完全掌控一切。因此,当你有一个带一些参数的时候,不带参数的就不再提供了。
因为你没有为第二个构造函数指定访问修饰符,所以它默认是私有的
只需将 public: 添加到您的构造函数中
class myclass
{
int id;
double x, y, z;
public:
//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
的 vector
- vector
有许多方法将使用默认构造函数。如果您像您一样提供自己的构造函数,通常的默认构造函数会 not 为您生成。通过添加带有 = default
的声明,您强制编译器生成缺少的默认值。如果自动生成的默认构造函数不够用,您也可以定义自己的默认构造函数,但是没有 vector
就无法使用
我有这个很简单class
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()
。
为什么会这样?什么时候强制指定不带参数的构造函数为默认值?
这可能是一个非常简单的问题,但关于构造函数的其他问题似乎针对构造函数的非常具体的问题,所以我认为这可能是值得的。
一旦您提供了任何构造函数,编译器就会停止为您提供其他构造函数 - 您将完全掌控一切。因此,当你有一个带一些参数的时候,不带参数的就不再提供了。
因为你没有为第二个构造函数指定访问修饰符,所以它默认是私有的
只需将 public: 添加到您的构造函数中
class myclass
{
int id;
double x, y, z;
public:
//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
的 vector
- vector
有许多方法将使用默认构造函数。如果您像您一样提供自己的构造函数,通常的默认构造函数会 not 为您生成。通过添加带有 = default
的声明,您强制编译器生成缺少的默认值。如果自动生成的默认构造函数不够用,您也可以定义自己的默认构造函数,但是没有 vector
就无法使用