Помогите с объявлением структуры C ++, с массивом float в качестве одного из его членов - PullRequest
2 голосов
/ 09 марта 2009

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

Мой код:

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

Ответы [ 3 ]

3 голосов
/ 09 марта 2009

Массивы распадаются на указатель на первый элемент массива в большинстве контекстов, как в случае с 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], если я правильно понимаю. Введите соответствующие значения. В противном случае будет инициализация по умолчанию - это то, что вы хотите?

3 голосов
/ 09 марта 2009

Попробуйте

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};
0 голосов
/ 09 марта 2009

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

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

...