由于某种原因,该函数不会保存除第一个对象之外的对象数组的成员值。我浓缩了代码以突出这个问题的本质。
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
之间不同。有时候它是0,有时候它就像8231924021
编辑: 这里是原始代码,相关部分写在顶部(如果您注意到某些细微差别,导致实际执行它的时间太长):classFile.h,classFile.cpp ,functionCallingFile.cpp
EDIT2:
看起来类成员的位置在每个对象的内存中移位3个字节,这使得除了第一个之外它们都无法读取它们。以下是myX
地址与objectArray[i].myX
地址的比较 - pastebinLink
我可以手动对付这3个字节的移位,但它就像将除臭剂喷洒到工作中而不是冲洗它。
EDIT3:
解决问题的方法是在callingFunctionFile.cpp文件中更改#include "classFile.h"
的位置。将它放在顶部后,第一个包含问题就消失了
答案 0 :(得分:2)
您在循环中递增i
两次,使您跳过数组中的每个其他元素。