いくつかの単純なクラスをネストして、追加の入力なしで変数と対話できるようにしていますが、コンパイラでエラーが発生します。&time を関数入力として使用したり、変数 &time を Vect クラス内に持たせたりせずに、どうすれば対話できるようになりますか?
関数プロトタイプと同じ場所で、コード内にあるデータにアクセスできるのと同じロジックを使用してみましたが、代わりにクラスにラップされています。これは、他のクラスを除いて、私が使用したものすべてに対してうまく機能します。誰でも理由を説明できますか?
問題のある time 変数を使用する場所を、define の前のようなコメント行でマークしました。
/*********/
#define MAX_POLY 3
class Container
{
public:
Container(void);
~Container(void);
float time;/*********/
class Vect
{
float P[MAX_POLY],iT;
public:
Vect(void){iT = 0.0f;P = {0,0,0};}
~Vect(void);
float GetPoly(int n){return P[n];}
float Render(void)
{
float t = time - iT;/*********/
float temp[2] = {0,0};
for(int n=0;n<MAX_POLY;n++)
{
temp[0] = P[n];
for(int m=0;m<n;m++)
temp[0] *= t;
temp[1] += temp[0];
}
return temp[1];
}
void SetPoly(int n,float f)
{
float t = time-iT;/*********/
P[0] = P[2]*t*t + P[1]*t + P[0];
P[1] = 2*P[2]*t + P[1];
//P[2] = P[2];
P[n] = f;
iT = time;/*********/
}
}X;
};
int main()
{
Container Shell;
Shell.X.SetPoly(0,5);
Shell.X.SetPoly(1,10);
Shell.X.SetPoly(2,-1);
for(int n=0;n<10;n++)
{
Shell.time = (float)n;
cout << n << " " << Shell.X.Render() << endl;
}
system("pause");
return 0;
}