두 클래스 인 Vertex와 Triangle이 있습니다. 먼저 꼭지점 필드를 만든 다음 꼭지점 필드에서 삼각형면의 벡터를 만듭니다. 각 정점에는 인접한 각 삼각형면에 대한 포인터 또는 참조가 필요합니다.각 개체의 벡터가 그것의 멤버에게 전달
다음은 내가 가진 간단한 예제입니다. 그러나 작동하지 않습니다.
struct Vertex {
float x, y, z;
vector<Triangle*> adj_triangles;
}
struct Triangle {
Vertex *v1;
Vertex *v2;
Vertex *v3;
Triangle(Vertex *v1_in, Vertex *v2_in, Vertex *v3_in) {
v1 = v1_in;
v2 = v2_in;
v3 = v3_in;
v1->adj_triangles.push_back(this);
v2->adj_triangles.push_back(this);
v3->adj_triangles.push_back(this);
}
}
struct Mesh {
vector< vector<Vertex> > field;
vector<Triangle> triangles;
}
그리고 이렇게 채우기하고, 물론 V1, V2, V3는 정점 객체에 대한 유효한 포인터
triangles.push_back(Triangle (v1, v2, v3));
.
나는이 같은 정점에서 삼각형에 액세스하려고
,v.adj_triangles[index]->member;
내가 원하는 것을 얻을하지 않습니다. 임시 삼각형을 먼저 밀면 임시로이 포인터에 따라 값이 초기화되기 때문에 이것이 아마 생각합니다. 그리고 나서 그것은 값에 의해 복사되고 파괴됩니다. 따라서 각 꼭지점에는 더 이상 존재하지 않는 객체에 대한 포인터가 있습니다.
그래서 나는 이것을 달성하는 방법이 무엇인지 궁금해하고 있었습니까? 스마트 포인터 벡터를 사용해야합니까?
시간 내 주셔서 감사합니다.
편집 :
그냥 내가 요구하고 무엇을 더 명확하게하고 싶었다. 코드가 올바로 작동하지 않는 이유에 대한 내 분석입니까? 이거 어떻게 생각해?
struct Triangle {
Vertex *v1;
Vertex *v2;
Vertex *v3;
Triangle(Vertex *v1_in, Vertex *v2_in, Vertex *v3_in) {
v1 = v1_in;
v2 = v2_in;
v3 = v3_in;
}
void give_address() {
v1->adj_triangles.push_back(this);
v2->adj_triangles.push_back(this);
v3->adj_triangles.push_back(this);
}
}
... 문제를 해결
triangles.push_back(Triangle (v1, v2, v3));
triangles.back().give_address();
. 그러나 이것이 나쁜 관행인지 궁금합니다.
를 저장하는 가장 좋은거야? – Naveen
그들은 (int j = 0; j
MVTC
음,'Mesh'는 포인터 대신 구조체 복사본을 생성하는'vector'와'벡터 '을 사용합니다. –
nneonneo