ABA


"שאלה ב-++C על אופטור אוברלאודינג"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15104 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15104
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   19:31   14.12.08   
אל הפורום  
  שאלה ב-++C על אופטור אוברלאודינג  
 
נתקלתי בבעיה הזו מזמן ופתרתי אותה אבל שכחתי איך

יש לי לצורך העניין שני קלאסים, אחד קלאס טמפלטי (עם typename) ואחד רגיל (בשם Fish).
אני שולח לטמפלט נודים של *Fish.

הבעיה היא שבטמפלט יש השוואה > ו-< והאופרטור שפועל עליהם זה אופרטור לחשבון פויינטרים (שמצביע למקום בזכרון שהוקצה לנוד הנוכחי).

אני רוצה ליצור אופרטור אוברלואדינג בקלאס FISH ככה שהוא ידע לקבל שני פויינטרים מסוג Fish* ולבצע חשבון על הערכים הפנימיים שלהם.
ניסיתי להשתמש ב-Friend ואני מקבל שגיאה
C2803: 'operator <' must have at least one formal parameter of class type

ניסיתי להשתמש ב-memeber אבל אני בכלל לא נכנס לפונקציה (וזה מן הסתם, כי מצד אחד הוא מקבל Fish& ומצד שני Fish*).

מה הפתרון בשביל זה?:}


תודה!


בברכה,
עידן


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  פתרון Limp Bizkit 14.12.08 23:28 1
     זה בעייתי by reference בגלל צורת מימוש הטמפלייט. ldan192  14.12.08 23:41 2

       
Limp Bizkit
חבר מתאריך 2.9.02
3436 הודעות
   23:28   14.12.08   
אל הפורום  
  1. פתרון  
בתגובה להודעה מספר 0
 
   כמו שהשגיאה אומרת - חסר לאופרטור "המועמס" (שונא את המילה הזו!) פרמטר של המחלקה עליה רוצים לבצע את הפעולה

אסור לך להעביר ל-operator overloding מצביעים! אחרת זה יהיה פשוט חסר ערך להשוות ערכים של המצביעים, וזה לא ישתמש בכלל באופרטור שאתה בנית (הרי יש כבר אופרטור מובנה להשוות בין ערכים בסיסיים כאלו)

הפיתרון : ב-prototype של האופרטור המועמס להעביר פרמטר אחד לפחות ב-by reference (לא להשתמש במצביעים, אלא ב-reference) או by value כדי שנוכל בעצם להשוות בין האובייקטים

תעדכן

Ask any racer, any real racer. It doesn't matter if you win by an inch or a mile; winning's
winning.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:41   14.12.08   
אל הפורום  
  2. זה בעייתי by reference בגלל צורת מימוש הטמפלייט.  
בתגובה להודעה מספר 1
 
בסוף אבל הסתדרנו, שינינו את ה-typename מ-Fish* ל-Fish ונממש את התוכנית עם שלושה עצים שונים, בקיצור בסוף זה אמור לעבוד.

תודה בכל מקרה


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net