何らかの理由で、関数は最初のものを除いてオブジェクトの配列のメンバー値を保存しません。この問題の性質を強調するためにコードを要約しました。
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];
呼び出し関数ファイル.cpp
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: 問題を解決したのは、#include "classFile.h"
callingFunctionFile.cpp ファイル内の位置を変更することでした。最初のインクルードとして一番上に配置した後、問題は消えました