Domain2D
이라는 사용자 정의 클래스를 갖고 싶다고 가정 해 봅시다. 도메인은 내부 벡터 Triangle
의 벡터와 Boundary2D
이라는 개체로 구성됩니다. Boundary2D
은 LineSegment
의 목록으로 구성되며 각 Triangle은 세 개의 V2
개체로 구성됩니다. 각 V2
개체는 두 개의 좌표로 구성됩니다.사용자 정의 클래스의 초기화 프로그램에 대한 C++ 혼동
다음은 과 같은 객체를 정의 할 수 있도록이 클래스의 V2 클래스와 생성자를 만듭니다. 기본값은 (0, 0)
입니다.
class V2 {
public:
long double x, y;
V2(long double xx = 0, long double yy = 0);
};
V2::V2(long double X, long double Y) {
x = X; y = Y;
}
내가해야 할 다음 일은 선분입니다 :
class LineSegment {
public:
V2 v1, v2;
LineSegment(V2 vv1 = V2(0, 0), V2 vv2 = V2(1, 0));
};
LineSegment::LineSegment(V2 VV1, V2 VV2) {
v1 = VV1; v2 = VV2;
}
기본 라인 세그먼트가 정점으로 구성 (0, 0)과 (1, 0). 그 때 나는 삼각형이 필요합니다
class Triangle {
public:
V2 v1, v2, v3;
Triangle(V2 vv1 = V2(0, 0), V2 vv2 = V2(1, 0), V2 vv3 = V2(0, 1));
};
Triangle::Triangle(V2 VV1, V2 VV2, V2 VV3) {
v1 = VV1; v2 = VV2; v3 = VV3;
}
기본 삼각형 좌표를 2 차원 데카르트의 표준 단면으로 구성 (0, 0), (1, 0), (0, 1)
은. 우리는 거의 우리는 단지 선 세그먼트로 구성된 경계해야 완료 :
class Boundary2D {
public:
std::vector<LineSegment> l;
Boundary2D(std::vector<LineSegment> ll = {});
};
Boundary2D::Boundary2D(std::vector<LineSegment> lll) {
l = lll;
}
기본 경계가 비어 ({}
)입니다, 그래서 필요한 경우, 우리는 즉시 push_back(...)
거기에 있습니다.
마지막으로, 도메인 경계 구성되어 있으며, 삼각형의 벡터 : 컴파일러는 삼각형의 기본 빈 벡터 괜찮지 만, 그것은 나의 필요를 이해하지 않습니다
class Domain2D {
public:
std::vector<Triangle> t;
Boundary2D b;
Domain2D(std::vector<Triangle> tt = {}, Boundary2D bb = Boundary2D({}));
};
Domain2D::Domain2D(std::vector<Triangle> ttt, Boundary2D bb) {
t = ttt; b = bb;
}
지금 여기서 문제 야 기본 빈 경계는 Boundary2D bb = Boundary2D({})
으로 초기화하려고했습니다. 그것은 <function-style-cast>: cannot convert from 'initializer list' to 'Boundary2D'
라고합니다. 내가 도대체 뭘 잘못하고있는 겁니까? 이런 구조를 만드는 것은 나쁜 접근입니까? 경계면의 기본 이니셜 라이저를 기본적으로 비워 두려면 어떻게해야합니까? 감사.
난 당신이 기본 인수 구성 복사 할 수 있다고 생각하지 않습니다. 이것은 작동합니다 :'Domain2D (std :: vector tt = {}, Boundary2D bb = {});' –
Tobias
Bundary2D는 이미 기본 생성자를 가지고 있으므로'Domain2D (std :: vector tt = {}, Boundary2D bb = Boundary2D ({}))'Domain2D (std :: vector tt = {}, Boundary2D bb)' –
mnistic
오 그 말이 맞아! 내가 왜 이걸 생각하지 않았 니? 불쌍한 내가 여기에 공간을 낭비하지 않을 것이라고 구글에서 나를 도울 것이 아무것도 찾을 수 없습니다. 설명 주셔서 대단히 감사합니다! – user16320