Рефакторю чужой проект. Уже почти всё сделал, но выдаётся предупреждение:
struct Vertex
{
vec3 Position;
vec3 Normal;
vec2 TexCoord;
int SrcTextures[2];
float TextWeight;
};
void Volume::CopyTris(Vertex* buffer, int depth)
{
if (!depth)
{
// Always do 5 tris
int vs = sizeof(Vertex);
memcpy(buffer + StartIndex, Verts, vs * 15);
}
else
{
if (Children[0]) // does this have children?
{
for (int i = 8; i--;)
{
Children[i]->CopyTris(buffer, depth - 1);
}
}
}
}
user@vm:~/projects/terrasculpt$ make
g++ -o ./bin/terrasculpt -g -Wall -L/usr/local/lib -I/usr/share/include -I/usr/local/libpng/include ./src/*.cpp -lGLEW -lglut -lX11 -lGL -lGLU -lpng -lstdc++
./src/Volume.cpp: In member function ‘void Volume::CopyTris(Vertex*, int)’:
./src/Volume.cpp:429:45: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘struct Vertex’; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
429 | memcpy(buffer + StartIndex, Verts, vs * 15);
| ^
In file included from ./src/Volume.cpp:1:
./src/Volume.h:16:8: note: ‘struct Vertex’ declared here
16 | struct Vertex
| ^~~~~~
Собираю в линуксе, так как на винде это собрать невозможно (используются очень древние библиотеки, которые есть только в линуксе). Собственно, по-этому и рефакторю - чтобы на винде собралось.
Если я правильно понял, он не знает как правильно копировать эту структуру. Нужен конструктор копирования или что-то ещё. А как в данном случае создать такой конструктор или что ещё можно сделать?
Программа-то работает, просто от ворнинга хочется избавиться