פורסם 2012 בינואר 1313 שנים יש לי וקטור של מצביעים מטיפוס *A. ישנם שני מחלקות שיורשות מ-A ובעצם יש פולימורפיזם והוקטור מכיל מצביעים לכל אחד מהמחלקות הללו.בעת שימוש באלגוריתם המיון של STL אני מקבל שגיאות שמקורן כנראה בכך שהיה ניסיון לייצר אינסטנס של מחלקה A.למה בעצם זה קורה?
פורסם 2012 בינואר 1313 שנים ראשית, sort משתמש באופרטור השוואה > ועבור מצביעים אופרטור ההשואה > אינו עושה מה שאתה רוצה, כנראה (אלא אם כן אתה רוצה למיין לפי כתובת). צריך להגדיר "אופרטור" השוואה (בעצם פונקצית השוואה).דוגמא ניתן למצוא כאן: http://cboard.cprogramming.com/cplusplus-programming/111974-sorting-stl-vector-pointers.htmlלגבי השגיאות שאתה מקבל, האם אתה בטוח שטיפוס הוקטור הוא std::vector<A*> v?
פורסם 2012 בינואר 1313 שנים מחבר אני מקבל את השגיאה: instantiated from here.וכן, טיפוס הוקטור הוא מצביע.
פורסם 2012 בינואר 1313 שנים גם אני נתקלתי בבעיה דומה, וקטור שמכיל אובייקט אבסטרקטי לחלוטין מתלונן על זה שהוא אבסטרקטי, ואח"כ גם דורש copy constructor או משהו בסגנון (יכול להיות שזה מגיע ממקור)
פורסם 2012 בינואר 1313 שנים אי אפשר לייצר וקטור (ולמעשה שום קונטיינר) של אובייקטים וירטואלים, כי אי אפשר לייצר אובייקטים וירטואלים.ניתן לייצר וקטור של מצביעים מטיפוס וירטואלי.וכן, וקטור דורש copy constructor ואופרטור השמה.
פורסם 2012 בינואר 1413 שנים מה הסיבה מאחורי זה?יש איזשהיא השמה/העתקה של האובייקט בווקטור?זה לא כמו רשימה מקושרת? (אני מגיע מC#/java/python שרשימות הם רפרנסים לאובייקטים)
פורסם 2012 בינואר 1413 שנים וקטור הוא מערך שניתן לשנות את גודלו (ככה הוא ממומש מאחורי הקלעים).בניגוד ל-#C וחברותיה, מערך של אובייקטים לא מחזיק רפרנסים לאובייקטים, אלא את האובייקטים עצמם. בגלל זה, הוא לא יכול להחזיק nullים, אלא הוא חייב להחזיק אובייקטים ממשיים. בשביל זה הוא כמובן חייב להיות מסוגל לאתחל אותם.לכן, לדוגמה, אם A הוא מחלקה שאין לה בנאי ברירת מחדל, הקוד הבא לא יעבוד:A* arr = new A[10];כי הוא לא יודע איך לאתחל את האיברים של arr.לוקטור, אגב, יש אפשרות לאתחל את כל האיברים כעותק של איבר אחד. לדוגמה, אם ל-A יש בנאי שמקבל שני intים, אז אפשר לעשות משהו כזה:vector<A> vec(5, A(1,2));שיוצר וקטור בגודל 5, שמכיל 5 עותקים זהים של A שמאותחל ע"י הפרמטרים 1,2 (זה דורש של-A יהיה גם copy constructor, מה שיש לו בברירת מחדל).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.