Определение данных не имеет типа или класса хранения с определением массива с плавающей точкой - PullRequest
0 голосов
/ 06 февраля 2011

Я, вероятно, скоро найду ответ слепым экспериментом или улучшенным поиском в Google, но .. Это может принести пользу другим.

Это НЕ внутри определения класса, но в цели.-c файл.У меня есть объявление массива с плавающей точкой, которое дает мне следующие два предупреждения в XCode.Ошибки отображаются в строке DECLARATION, а не в строке назначения.

Объявление данных не имеет типа или класса хранения.По умолчанию в объявлении

вводится значение по умолчанию 'int'. Тогда присваивание завершается неудачно, но если значение переменной по умолчанию равно int, это может произойти.Первое объявление (статический константный массив с плавающей запятой с инициализатором) не выдает ошибку, а второе (простой метод с плавающей запятой).Третий и четвертый (плавающие массивы) делают.

static const float offset3d[4] = {
    0.0, 0.0, -2.0, 0.0
};
float boxv;
float boxv0[3];
float boxv1[3];

boxv0[0] = -0.5;
// this gives the error of trying to assign float to (default) int

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Похоже, что вы пытаетесь выполнить задание

boxv0[0] = -0.5;

вне функционального блока, что недопустимо. Вне функциональных блоков допускаются только объявления (с инициализаторами или без них). Предупреждающие сообщения, которые вы получаете, связаны с тем фактом, что C традиционно подразумевает int, когда тип не указан, поэтому вне функционального блока

someVariable = 5;

неявно вводится как int, то есть приведенное выше определение эквивалентно

int someVariable = 5;

Когда компилятор видит

boxv0[0] = -0.5;

вне функционального блока, он замечает, что спецификация типа отсутствует, поэтому он принимает int (который выдает предупреждение). Затем он понимает, что boxv0 был ранее объявлен как float, поэтому выдает ошибку конфликтующих типов.

Если вам нужно инициализировать boxv0 вне функционального блока, сделайте это, как вы сделали для offset3d, например,

float boxv0[3] = {
    -0.5f, -1.0f, -1.5f
};
0 голосов
/ 06 февраля 2011

Вам нужно поместить boxv0[0] = -05.; в метод где-нибудь.Каждое из ваших объявлений должно работать, а назначение не должно выполняться.Ваше первое назначение работает, потому что вы полностью назначаете объявленный массив - это приемлемо, потому что компилятор может создать ячейку памяти и заполнить ее.Последний сбой, потому что вы пытаетесь изменить его динамически вне метода класса, что не разрешено компилятором.Наконец, если вы получаете предупреждения в декларациях, возможно, у вас есть что-то еще.

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