我有一个由dobule A2组成的matrix2d类。我正在尝试做一个构造函数,它接受相同类型的obejct,并将它的所有值复制到A2。我有一个问题,下面是类:
class matrix2D {
public:
double A[2][2];
double Z[2][2];
//Default Constructor.
matrix2D() {
A[0][0] = A[1][1] = 1;
A[0][1] = A[1][0] = 0;
}
matrix2D(double x00,double x01, double x10, double x11) {
A[0][0] = x00;
A[0][1] = x01;
A[1][0] = x10;
A[1][1] = x11;
}现在我要创建一个构造函数,它接受matrix2D对象,然后将它的所有值都赋给A。
// Copy Constructor.
matrix2D(matrix2D& Z) {
for(int i = 0; i < 2; ++i) {
for(int j = 0; j < 2; ++j) {
A[i][j]=*(Z[i][j]);
}
}
}它告诉我,我尝试将双精度值赋给matrix2d对象。为什么*Zi没有引用双精度?
解决:我做了Ai=Z.Ai :)!
发布于 2016-09-30 23:24:05
该行中的*没有任何意义。
有了这些数据,您根本不需要复制构造函数。但是,如果您必须实现一个,它需要类似于以下内容:
// Use const&, not just &.
// Use a more suitable variable name for the copy
matrix2D(matrix2D const& copy) {
for(int i = 0; i < 2; ++i) {
for(int j = 0; j < 2; ++j) {
A[i][j]= copy.A[i][j]; // Copy A
Z[i][j]= copy.Z[i][j]; // Copy Z.
}
}
}发布于 2016-09-30 23:27:50
您的复制构造函数有问题,您正在隐藏其中一个成员(成员名称Z和参数名称Z)。
我建议不要编写自己的复制构造函数,让编译器为您生成一个:
matrix2D(const matrix2D & value) = default;发布于 2016-09-30 23:32:13
添加第二个答案。这是我更喜欢的答案。
只需从类声明和定义中完全删除复制构造函数即可。
假设您的类只包含一对大小固定的数组,则不需要复制构造函数。编译器会自动为你生成一个。通常只有当您的类动态分配了成员变量,并且您需要确保指针值不会在实例之间产生别名时,才需要自定义复制构造函数。
https://stackoverflow.com/questions/39794870
复制相似问题