这是我的代码产生错误(错误的真正原因/补救措施是在P.S.2中,但我仍然在寻找原因):
#include "stdafx.h"
#include <vector>
using namespace std;
class V2 {
public:
long double x, y;
V2(long double xx = 0, long double yy = 0);
friend V2 operator+(const V2 &v1, const V2 &v2);
friend V2 operator-(const V2 &v1, const V2 &v2);
friend V2 operator*(const long double &r, const V2 &v);
friend V2 operator*(const V2 &v, const long double &r);
friend V2 operator/(const V2 &v, const long double &r);
};
V2::V2(long double X, long double Y) { x = X; y = Y; }
V2 operator+(const V2 &v1, const V2 &v2) { return V2(v1.x + v2.x, v1.y + v2.y); }
V2 operator-(const V2 &v1, const V2 &v2) { return V2(v1.x - v2.x, v1.y - v2.y); }
V2 operator*(const long double &r, const V2 &v) { return V2(r*v.x, r*v.y); }
V2 operator*(const V2 &v, const long double &r) { return V2(r*v.x, r*v.y); }
V2 operator/(const V2 &v, const long double &r) { return V2(v.x / r, v.y / r); }
long double Dot(const V2 &v1, const V2 &v2) { return v1.x*v2.x + v1.y*v2.y; }
long double Cross(const V2 &v1, const V2 &v2) { return v1.x*v2.y - v1.y*v2.x; }
long double DistanceSqr(const V2 &v1, const V2 &v2) { return Dot(v1 - v2, v1 - v2); }
long double Distance(const V2 &v1, const V2 &v2) { return sqrt(Dot(v1 - v2, v1 - v2)); }
class Face {
public:
unsigned int v1, v2, v3;
Face(int vv1 = 0, int vv2 = 0, int vv3 = 0);
};
Face::Face(int vv1, int vv2, int vv3) {
v1 = vv1; v2 = vv2; v3 = vv3;
}
class LineSegment {
public:
unsigned int v1, v2;
LineSegment(int seg1 = 0, int seg2 = 0);
};
LineSegment::LineSegment(int seg1, int seg2) {
v1 = seg1; v2 = seg2;
}
class Boundary2D {
private:
long double threshold = 1e-7;
unsigned int i, j;
public:
vector<V2> p;
vector<LineSegment> s;
Boundary2D(vector<V2> po = {}, vector<LineSegment> seg = {});
};
Boundary2D::Boundary2D(vector<V2> po, vector<LineSegment> seg) {
p = po; s = seg;
}
class Interior2D {
private:
const long double threshold = 1e-7;
unsigned int i, j;
public:
vector<V2> p;
vector<Face> f;
Interior2D(vector<V2> po = {}, vector<Face> fa = {});
};
Interior2D::Interior2D(vector<V2> po, vector<Face> fa) {
p = po; f = fa;
}
class Domain2D {
public:
Boundary2D Boundary;
Interior2D Interior;
Domain2D(Boundary2D bnd = {}, Interior2D itr = {});
};
Domain2D::Domain2D(Boundary2D bnd, Interior2D itr) {
Boundary = bnd; Interior = itr;
}
int main()
{
return 0;
}
错误指向Domain2D构造函数“Interior = itr”(“=”标记为红色)内部,并显示:function "Interior2D::operator=(const Interior2D &)" (declared implicitly) cannot be referenced -- it is a deleted function
和'Interior2D &Interior2D::operator =(const Interior2D &)': attempting to reference a deleted function
。我不知道这是什么意思,我认为它只是一个标准的构造函数,以防我需要定义一个新的Domain2D
,如下所示:Domain2D d = Domain2D(some_bndry, some_interior)
而不是d.Boundary = ...
,{{1}这有点冗长。 Domain2D构造函数有什么大不了的,为什么它会引发错误呢?
P.S。:我发现在评论d.Interior = ...
类的private:
部分后,错误消失了。但是Interior2D
类中有相同的部分,并且不会产生错误。此外,我需要这些变量(Boundary2D
,i
,j
)来定义类中的一些函数(比如添加一个点,形成一个段或三角形等)。所以它真的归结为:为什么在类中使用私有:threshold
,i
,j
变量会导致类构造函数引发错误?
P.S.2:我发现将threshold
作为常规的长双变量(没有threshold
),错误消失了。如果这是唯一的问题,问题是:为什么? const
变量真的像一个常数,有助于判断两个双精度是否“相等”,我当然不希望它改变,它是一个常量。我们为什么不允许它保持不变?我听说如果变量保持不变,最好使变量保持不变。私有变量的常量与一些奇怪的“删除函数”错误有什么关系?