По какой-то причине функция не сохраняет значения элементов для массива объектов, кроме первого. Я сжал код, чтобы подчеркнуть природу этой проблемы.
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
}
extern myClass objectArray[10];
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. После размещения в верхней части, как первый включить проблема исчезла
Вы увеличиваете i
дважды в цикле, заставляя пропустить все остальные элементы в массиве.
Других решений пока нет …