iOS と Android の両方のアプリケーションに取り組んでいますが、C++ コードで非常に異なる結果が得られます。私が抱えている問題は、関数に入るとメンバー変数が派生クラスであるということです。例として
int main()
{
A** arrayOfA = new A[10];
for (int i = 0; i < 10; ++i)
{
arrayOfA[i] = new D();
}
return 0;
};
class A
{
// Original code here. After this is the added function and member variable that breaks it
public:
virtual u32 GetterFunction() = 0;
protected:
u32 ProblemVariable;
};
class B : A
{
public:
B(u32 index) { ProblemVariable = index }
virtual u32 StompedGetter() = 0;
virtual u32 GetterFunction() { return ProblemVariable; }
void Initialize()
{
u32 sometimesBunkNumber = StompedGetter();
}
protected:
u32 StompedVariable;
};
class C : A
{
public:
virtual u32 GetterFunction() { return 0; }
};
class D : B
{
B() { Initialize(); }
virtual StompedGetter() { return StompedVariable; }
}
class E : B
{
virtual StompedGetter() { return 0; }
}
さて、ここでの問題は、メンバー変数と仮想ゲッターをクラス A に配置するまで、すべてが正常に機能することです。ゲッターが呼び出されると、ランダムな時間にバンク番号が与えられます。それは 2 回動作する可能性があり、その後、不適切な数値を返します (メモリ内の不適切な場所から取得していることは明らかです)。関数が仮想かどうかは問題ではありませんが、理想的なソリューションです。最悪の部分は、これがコンパイルされ、iOS バージョンではうまく動作するが、Android では機能しないことです。明確化として、クラス A の配列でクラス B を初期化するまで実行されます。前もって感謝します!