Выражение должно быть изменяемым значением для структуры - PullRequest
0 голосов
/ 23 февраля 2020
struct Vertex
{
    float Position[3];
    float Color[4];
    float TextCoords[2];
    float TexId;
};

static std::array<Vertex, 4> CreateQuad(float x, float y) {
    Vertex v;
    v.Position = { 0.0f,0.0f,0.0f };
}

это дает мне ошибку, что v должно быть изменяемым значением. и и слишком много значения инициализатора.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Вы не можете назначить простой массив со списком инициализаторов, но вы можете назначить std::array таким образом:

struct Vertex
{
    std::array<float, 3> Position;
    std::array<float, 4> Color;
    std::array<float, 2> TextCoords;
    float TexId;
};

 static std::array<Vertex, 4> CreateQuad(float x, float y) {
    std::array<Vertex, 4> v;    
    v[0].Position = { 0.0f, 0.0f, 0.0f };
    // fill the rest of v...
    return v;
}
0 голосов
/ 23 февраля 2020

Вы не можете назначить массив списку инициализатора. Вот почему вы получаете сообщение об ошибке:

ошибка: назначение массива из списка инициализаторов

Однако вы можете передать std::initializer_list вашему конструктору и скопировать его члены в обычный массив, например:

Vertex(std::initializer_list<float> const& position) {
    std::copy(position.begin(), position.end(), Position);
}

, а затем инициализировать как Vertex v({ 0.0f,0.0f,0.0f });.

Однако я бы предложил вам использовать std::array вместо обычного массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...