Помогите с объявлением структуры C++, в которой одним из членов является массив с плавающей запятой.

StackOverflow https://stackoverflow.com/questions/627512

Вопрос

Мне было интересно, сможет ли кто-нибудь определить, что не так с моим объявлением и использованием структуры.На данный момент у меня есть структура, и я хочу сохранить массив с плавающей запятой в качестве одного из ее членов.

Мой код:

struct Player{
float x[12];
float y[12];
float red,green,blue;
float r_leg, l_leg;
int poly[3];
bool up,down;
};

Затем я попытался заполнить структуру:

float xcords[12] = {1,1,1,1,1,1,1,1,1,1,1,1 };
float ycords[12] = {1,1,1,1,1,1,1,1,1,1,1,1 };
Player player = {xcords,ycords,1,1,1,2,2,true,true};

Ошибка:

1>.\template_with_console.cpp(35) : error C2440: 'initializing' : cannot convert from 'float [12]' to 'float'
1>        There is no context in which this conversion is possible
1>.\template_with_console.cpp(35) : error C2440: 'initializing' : cannot convert from 'float [12]' to 'float'
1>        There is no context in which this conversion is possible
Это было полезно?

Решение

Массивы распадаются на указатель на первый элемент массива в большинстве контекстов, как в случае с xcords и ycords . Вы не можете инициализировать структуру следующим образом. Итак, вы должны явно инициализировать элементы:

Player player = {
        {1,1,1,1,1,1,1,1,1,1,1,1 }, // xcords
        {1,1,1,1,1,1,1,1,1,1,1,1 }, // ycords
        1,1,1,                      // red, green, blue
        2,2,                        // right, left
        {0,1,2},                    // poly[3]   -- missing?          
        true,true};                 // up, down

Вам также не хватает инициализаторов для poly [3], если я правильно понимаю. Введите соответствующие значения. В противном случае будет инициализация по умолчанию - это то, что вы хотите?

Другие советы

Пытаться

Player player = {{1,1,1,1,1,1,1,1,1,1,1,1 },
                 {1,1,1,1,1,1,1,1,1,1,1,1 },
                 1,1,1,
                 2,2,
                 {},
                 true,true};

Я думаю, вы ожидаете, что инициализация скопирует элементы каждого массива в вашу структуру. Попробуйте инициализировать элементы массива в вашей структуре индивидуально, скажем, с помощью цикла for .

Нет " конструктора " для массива с плавающей точкой, который будет копировать элементы другого массива.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top