Функция класса не сохраняет значения членов
По какой-то причине функция не сохраняет значения элементов для массива объектов, кроме первого. Я сжал код, чтобы подчеркнуть природу этой проблемы.
classFile.cpp
myClass objectArray[10];
void myClass::Set(float x, int elementID)
{
myX = x;
log<< myX; //output is equal to x
log<< elementID; //output ranges from 0-9
log<< objectArray[elementID].myX; //output is incorrect if elementID is higher than 0
}
classFile.h
extern myClass objectArray[10];
callingFunctionFile.cpp
for(int i=0; i<10;i++)
{
objectArray[i].Set(5.0f, i);
i++;
}
Неправильный вывод objectArray[elementID].myX
всегда то же самое для конкретного elementID
но отличается от других elementID
s. Иногда это 0, иногда что-то вроде 8231924021
Редактировать: вот оригинальный код с соответствующими частями, написанными вверху (в случае, если вы заметили некоторые нюансы, потому что это слишком долго, чтобы на самом деле пройти через него): classFile.h, classFile.cpp, functionCallingFile.cpp
Edit2: похоже, что положение членов класса смещается в памяти по 3 байта на каждый объект, и это делает невозможным их чтение, кроме первого. Вот сравнение myX
адреса и objectArray[i].myX
адреса - pastebinLink
Я мог бы просто противостоять этому сдвигу в 3 байта вручную, но это все равно, что разбрызгивать дезодорант в грязный, а не промывать его.
Edit3: то, что решило проблему, изменило положение #include "classFile.h"
внутри файла callFunctionFile.cpp. После размещения в верхней части, как первый включить проблема исчезла
1 ответ
Вы увеличиваете i
дважды в цикле, заставляя пропустить все остальные элементы в массиве.