פורסם 2014 בנובמבר 2911 שנים אהלן.יש לי מחלקה אבסטרקטית נקרא לה A עם שיטה אחת נקרא לה perform שממנה יורשות שתי מחלקות נקרא להן B ו C.אני רוצה להכניס אובייקטים של B וC לתוך multimap וכשאני עובר על הmultimap להפעיל על כל איבר שאני עובר עליו את השיטה perform מבלי שאני בודק מאיזה סוג הוא.מה שעשיתי הוא אתחלתי multimap ששדה הdata שלו הוא מסוג פויינטר לA.אתחלתי משתנים באופן הבא:A* somthing=new B או A* somthing=new C.ואז אני מבצע:mymultimap.insert(make_pair(key,somthing)w; להתעלם מהw בסוף.כשאני עובר באיטרציה על המאפ ומנסה להפעיל את perform על שדה הdata אני מקבל הודעת שגיאה, האובייקטים מזוהים כA, ואני מקבל segmentation fault.גם כאשר אני מנסה לגשת לשדה של אחת המחלקות B אוC הוא מזוהה כA וזורק לי שגיאה שלA לא קיים שדה כזה.את פעולת ההפעלה אני מבצע כך:it->second->somefeild/somemethod()w. להתעלם מהwit הוא איטרטור שרץ על המולטימאפ.לפי מה שקראתי באינטרנט צריך לעבוד עם פויינטרים וזה מה שאני עושה כדי למנוע slicing.משום מה נראה לי שעדיין הקומפיילר מבצע slicing.מה יכולה להיות הבעיה? נערך 2014 בנובמבר 2911 שנים על-ידי FARKASH7
פורסם 2014 בנובמבר 2911 שנים מחבר הכל רשום בהודעה הראשונה, אבל אני אחזור על זה.המולטימאפ מוגדר ככה:<string, A*>ככה אני מכניס איבר למאפ:A* somthingtoinsert = new B()wmymap.insert(key,somthingtoinsert)אני עובר בעזרת איטרטור it על המפה ומנסה להפעיל שיטות/לגשת לשדות כך: it->second->somefeild/somemethod()w. להתעלם מהw נערך 2014 בנובמבר 2911 שנים על-ידי FARKASH7
פורסם 2014 בנובמבר 2911 שנים טוב, אולי מישהו יעזור לך, נראה לי שכדאי לך:א. להשתמש ב CODE TAG בשביל לשים את הקוד במקום W, זה יותר קריא.ב. כדאי לך לעשות מה שאמרתי (לרשום קוד, ולא "אני עובר בעזר איטרטור it).בהצלחה.
פורסם 2014 בדצמבר 410 שנים אני מניח שB ו C יורשים מA. אם כך אתה פשוט צריך מתודה ווירטואלית ב A שנקראת PERFORM ו B ו C ממשים את אותה מתודה.חפש virtual method יש גם משהוא שנקרא pure virtual שאז אתה לא צריך לתת ממימוש ב A אבל זה לא קריטי, אתה יכול פשוט לתת מימוש ריק.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.