我有一个非常简单的课程
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()。
这一切为什么要发生?什么时候必须指定不使用参数作为默认参数的构造函数?
这可能是一个非常简单的问题,但关于构造函数的其他问题似乎针对的是非常具体的构造函数问题,因此我认为这可能是值得的。
发布于 2015-08-04 22:10:21
一旦提供了任何构造函数,编译器就不再为您提供其他构造函数--您将完全控制。因此,当您有一个接受一些参数时,就不再提供不需要参数的参数。
发布于 2015-08-04 22:38:47
问题在于,vector of myclass - vector有许多使用默认构造函数的方法。如果您像以前一样提供自己的构造函数,通常的默认构造函数不会为您生成。通过使用= default添加声明,您强制编译器生成缺少的默认值。如果自动生成的构造函数不够,也可以定义自己的默认构造函数,但是没有构造函数就无法使用vector。
发布于 2015-08-04 22:23:39
因为您没有为第二个构造函数指定访问修饰符,所以默认情况下它是私有的。
只需向构造函数中添加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) {};
};https://stackoverflow.com/questions/31820235
复制相似问题