У меня странная проблема. Есть вектор структур. С временной структурой я возвращаюсь к этому вектору структур. Но когда я проверяю первого члена 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
Сгенерированный компилятором конструктор копирования (и оператор присваивания) используется для Vector
а также Face
(но самое главное Vector
). Поскольку код повторно использует тот же экземпляр Face
по имени temp_face
, все случаи Face
в векторе face
указывают на то же самое Face.cnt.dim
массив (как faces
будет содержать копии temp_face
).
Я не вижу причин для динамического размещения массива внутри Vector
как это фиксированный размер. Предложить изменение на:
struct Vector
{
float dim[3];
};
Или вам нужно реализовать конструктор копирования, оператор присваивания и деструктор для Vector
,
Увидеть Что такое правило трех? для дополнительной информации.
Других решений пока нет …