由于某种原因,该函数不保存对象数组的成员值,除了第一个。我压缩了代码以突出这个问题的本质。
类文件.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
}
类文件.h
extern myClass objectArray[10];
调用函数文件.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 文件内部的位置。将其作为第一个包含放在顶部后,问题就消失了