Рефакторю чужой проект. Уже почти всё сделал, но выдаётся предупреждение:
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
      |        ^~~~~~
Собираю в линуксе, так как на винде это собрать невозможно (используются очень древние библиотеки, которые есть только в линуксе). Собственно, по-этому и рефакторю - чтобы на винде собралось.
Если я правильно понял, он не знает как правильно копировать эту структуру. Нужен конструктор копирования или что-то ещё. А как в данном случае создать такой конструктор или что ещё можно сделать?
Программа-то работает, просто от ворнинга хочется избавиться ![]()