Проблемы с копированием массивов из параметров конструктора класса в переменные элементаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблемы с копированием массивов из параметров конструктора класса в переменные элемента

Сообщение Anonymous »

Сейчас я пишу класс Mesh для своей программы на C++, но есть несколько проблем.
По сути, мой подход следующий:
  • Передать массив объектов Vertex (

    Код: Выделить всё

    vertices
    ) и uint16_t s () в конструктор
  • Allocate m_vertices с использованием calloc (sizeof (vertex), sizeof (vertices)) , и сделайте что -то похожее для m_indices < /code> < /li> Вершины массив в недавно выделенные m_vertices и еще раз сделайте что -то похожее для индексов Когда объект сетки уничтожен
Для дополнительного контекста я предоставил некоторые из соответствующих кодов ниже.
Vertex struct:

Код: Выделить всё

typedef struct
{
float    x;
float    y;
float    z;
uint32_t abgr;
} Vertex;
Вершины и индексы Данные, которые я использую для тестирования:

Код: Выделить всё

static Vertex cubeVertices[] =
{
{-1.0f,  1.0f,  1.0f, 0xff888888 },
{ 1.0f,  1.0f,  1.0f, 0xff8888ff },
{-1.0f, -1.0f,  1.0f, 0xff88ff88 },
{ 1.0f, -1.0f,  1.0f, 0xff88ffff },
{-1.0f,  1.0f, -1.0f, 0xffff8888 },
{ 1.0f,  1.0f, -1.0f, 0xffff88ff },
{-1.0f, -1.0f, -1.0f, 0xffffff88 },
{ 1.0f, -1.0f, -1.0f, 0xffffffff },
};

static uint16_t cubeIndices[] =
{
0, 1, 2,
1, 3, 2,
4, 6, 5,
5, 6, 7,
0, 2, 4,
4, 2, 6,
1, 5, 3,
5, 7, 3,
0, 4, 1,
4, 5, 1,
2, 3, 6,
6, 3, 7,
};
Сетка Constructor (также печатает информация отладки):

Код: Выделить всё

Mesh::Mesh(Vertex* vertices, uint16_t* indices)
{
m_vertices = (Vertex*) calloc(sizeof(Vertex), sizeof(vertices));
m_indices = (uint16_t*) calloc(sizeof(uint16_t), sizeof(indices));

memcpy(m_vertices, vertices, sizeof(vertices));
memcpy(m_indices, indices, sizeof(indices));

for (int i = 0; i < sizeof(m_vertices); i++)
{
printf("Vertex %d\nx: %f, y: %f, z: %f\n",
i,
m_vertices[i].x,
m_vertices[i].y,
m_vertices[i].z
);
}
}
Сам класс сетки :

Код: Выделить всё

class Mesh
{

public:

Mesh(Vertex* vertices, uint16_t* indices);
virtual ~Mesh();

Vertex*   getVertices() { return m_vertices; }
uint16_t* getIndices()  { return m_indices; }

private:

Vertex*   m_vertices;
uint16_t* m_indices;

};
Однако, как ни странно, когда я пытаюсь напечатать содержимое m_vertices, результаты не соответствуют массиву CubeVertices, который я передал конструктору (в основном нули, что вообще не соответствует входным данным).
Это результат моего кода отладки в конструкторе:

Код: Выделить всё

Vertex 0
x: -1.000000, y: 1.000000, z: 0.000000
Vertex 1
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 2
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 3
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 4
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 5
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 6
x: 0.000000, y: 0.000000, z: 0.000000
Vertex 7
x: 0.000000, y: 0.000000, z: 0.000000
Что я здесь делаю?

Подробнее здесь: https://stackoverflow.com/questions/793 ... er-variabl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»