-4

由于某种原因,该函数不保存对象数组的成员值,除了第一个。我压缩了代码以突出这个问题的本质。

类文件.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但在其他elementIDs 之间是不同的。有时是 0,有时是 8231924021

编辑:这是在顶部写有相关部分的原始代码(如果您发现一些细微差别会导致实际浏览它的时间太长):classFile.hclassFile.cppfunctionCallingFile.cpp

Edit2:看起来类成员的位置在每个对象的内存中移动了 3 个字节,这使得除了第一个对象之外无法读取它们。这是myX地址和objectArray[i].myX地址的比较 - pastebinLink

我可以手动抵消这 3 个字节的移位,但这就像将除臭剂喷洒到劳作中而不是冲洗它。

Edit3:解决问题的方法是改变#include "classFile.h"callFunctionFile.cpp 文件内部的位置。将其作为第一个包含放在顶部后,问题就消失了

4

1 回答 1

2

i在循环中增加了两次,使您跳过数组中的每个其他元素。

于 2015-12-13T14:14:11.367 回答