Помогите с объявлением структуры C++, в которой одним из членов является массив с плавающей запятой.
-
06-07-2019 - |
Вопрос
Мне было интересно, сможет ли кто-нибудь определить, что не так с моим объявлением и использованием структуры.На данный момент у меня есть структура, и я хочу сохранить массив с плавающей запятой в качестве одного из ее членов.
Мой код:
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
.
Нет " конструктора " для массива с плавающей точкой, который будет копировать элементы другого массива.