2012-09-22 3 views
3

변경합니다. 구조의 벡터가 있습니다. 임시 구조를 사용하면 구조의 벡터에 push_back을 수행합니다. 그러나 첫 번째 멤버의 cnt을 확인하면 변경된 것으로 나타납니다. 어떤 생각?가치는 내가 이상한 문제가 예기치 않게

struct Vector 
{ 
    float *dim; 

    Vector() 
    { 
    dim = new float [3]; 
    } 
}; 

struct Face 
{ 
    float an_N, an_P; 
    int P, N; 
    Vector Af; 
    float Ad; 
    Vector cnt; 
    float ifac; 
    float mf; 
}; 

std::vector <Face> face; 

Face temp_face; 

for (;;) 
{ 
    temp_face.cnt.dim[0] = 0.f; 
    temp_face.cnt.dim[1] = 0.f; 
    temp_face.cnt.dim[2] = 0.f; 

    for (int q=0; q<n_vtx_2D; ++q) 
    { 
     temp_face.cnt = temp_face.cnt + pt[vtx[q]]/n_vtx_2D;     
    }     

    face.push_back(temp_face); 
} 

std::cout << face[0].cnt.dim[0] << std::endl; 

출력

0.25

0

답변

5

기본 컴파일러 생성 복사 생성자 (대입 연산자)를 사용하고 (코드 아래의 간단한 버전하지만 대표적인이다) VectorFace (그러나 가장 중요한 Vector)합니다. 코드에서 Face이라는 동일한 인스턴스 (예 : temp_face)를 다시 사용하므로 벡터 faceFace의 모든 인스턴스는 이 temp_face의 복사본을 포함하므로 Face.cnt.dim 배열을 가리 킵니다.

가 고정 된 크기로 내부 Vector 동적 배열을 위해 할당 된 I 어떤 이유가 없다. 로 변경 제안 :

struct Vector 
{ 
    float dim[3]; 
}; 

또는 당신은 Vector에 대한 복사 생성자, 할당 연산자 및 소멸자를 구현해야합니다. 자세한 내용은 What is The Rule of Three?를 참조하십시오.

+0

매번 나는에 대한 루프의 새로운'temp_face'를 작성해야합니까? – Shibli

+0

@Shibli, no. 'Vector'를 고쳐야합니다. 당신이 말한대로 – hmjd

+0

나는 벡터를 고정 내가 여전히 근본적인 문제를 이해하지 않지만했다. 어쨌든 대단히 감사합니다! – Shibli

관련 문제