תני לי להבין
typedef CArray<CParam*,CParam*> ParamArray;
את יוצרת טיפוס של מערך של מצביעים ל-CParam, וקוראת לו ParamArray.
CArray<ParamArray,ParamArray> m_oParmaters;//a member array
אחר כך את יוצרת מערך של הטיפוסים שיצרת, בשם m_oParmaters.
m_oParmaters.SetSize(10); m_oParmaters[0].Add(p);
עכשיו שימי לב! את מגדירה את המערך של המערכים לגודל 10, אבל מכניסה אבר למערך הראשון, שלו לא עשית SetSize (לא שזה נורא, המערך דינמי, אבל האם זה מה שרצית??) עכשיו לבעיה האמיתית, שהיא, איך לא, נסיון ליצור זהות בין מערכים למצביעים. שימי לב:
nSize = m_oParmaters[0].GetSize();//return 1 nSize2 = pParamatersArr[0].GetSize();//return 10
בשורה הראשונה, האוביקט הוא CArray. עליו את מפעילה את אופרטור [], עם פרמטר 0, ועל האוביקט המוחזר לך, מסוג ParamArray, (אליו הכנסת את p, בלי SetSize), את מפעילה את GetSize ומקבלת 1, כמו שצריך. בשורה השניה, האוביקט הוא
מצביע ל-CArray, לא CArray כמו בשורה הקודמת. על המתביע הזה את מפעילה את אופרטור [], למעשה אריתמטיקה של מצביעים, ומגיעה לאותו מקום, עכשיו כאוביקט CArray, אבל לא האוביקט שרצית, אלא המערך של המערכים, שגודלו 10 (כי עשית לו SetSize). השורה המתוקנת (בהנחה שהבנתי מה את רוצה) היא:
nSize2 = (*pParamatersArr)[0].GetSize();//return 1
כלומר עוד dereference אחד, כדי להגיע מהמצביע לאובייקט עצמו, ועל האבר הראשון באותו אוביקט, להפעיל GetSize. נראה לי שזהו.