פורסם 2008 ביוני 717 שנים בוקר טוב לכולם!יש לי עבודה לעשות ב CPP ויש לי בעייה.בעבודה אמורים להגדיר מחלקת אבא ולו 3 בנים. לאבא יש משתנה אחד מסוג INT ול-2 מ -3 הבנים יתווסף INT נוסף.שמות ה"ילדים" הם DAYINYEAR, DAYINMONTH, DAYINWEEK. ה- DAYINYEAR הוא ללא המשתנה הנוסף.הבעייה שלי היא ביצירת פעולה אונרית שהופכת את DAYINMONTH ו- DAYINWEEK ל DAYINYEAR:DAYINYEAR operator~()אני יודע שבאבא אני לא יכול להגדיר פעולה וירטואלית שתחזיר DAYINYEAR כי האבא לא מודע לקיומו של הבן. רשמתי את:DAYINYEAR operator~()כאופרטור ב- DATINMONTH אבל זה לא מתהדר. יש הרבה בעיות כשהאשון מבינהם הוא:Error error C2143: syntax error : missing ';' before '~'משהו יודע איך אני מגדיר את הפעולה שתחזיר DAYINYEARתודה רבה והמשך שבת נעימה, מושיקו[attachment deleted by admin]
פורסם 2008 ביוני 717 שנים הודעת השגיאה המדוייקת תלויה בקומפיילר, אבל סביר להניח שהבעיה היא שהקומפיילר לא מכיר את DAYINYEAR בזמן ההצהרה על האופרטור.חוץ מזה אל תשתמש ב-~ לפעולה הזו. תשתמש באופרטור המרה:operator DAYINYEAR () { return ......; }
פורסם 2008 ביוני 717 שנים אתה יכול דווקא להגדיר באבא פונקציה וירטואלית שתחזיר DAYINYEAR, באמצעות ההצהרה הבאה לפני האבא:class DAYINYEAR;שים לב שזה בעצם רק מצהיר על קיומו של הקלאס DAYINYEAR, ולא מגדיר מהו בדיוק (בשביל זה יש את ההגדרה המלאה של הקלאס שתבוא בנפרד, וזה יהיו תפקידו של הlinker לקשר ביניהם).את הבעיה עצמה לא ממש הבנתי, אז אשמח אם תוכל להעלות את הקוד ולהצביע על הבעיה בדיוק.חוץ מזה, הערה קטנה - רק קבועים נהוג לרשום באותיות גדולות. יותר "יפה" לקרוא לקלאסים שלך DayInYear, DayInMonth ו-DayInWeek.
פורסם 2008 ביוני 717 שנים אפשר להשתמש ב-forward declaration רק אם משתמשים ברפרנס או מצביע למחלקה המקורית. אחרת צריך את ההגדרה המלאה.
פורסם 2008 ביוני 717 שנים מחבר קודם כל, תודה על התגובות והעזרה.דבר שני, את ההודעה הזו כתבתי קודם בשני חלקים בגלל זה ה- DAYINYEAR כתוב ככה בחלקו רק באותיות גדולות. אצלי בתוכנית הוא כתוב כמו שרשמת.חוץ מזה אל תשתמש ב-~ לפעולה הזו. תשתמש באופרטור המרה:operator DAYINYEAR () { return ......; }אבל מה פה בדיוק האופרטור, ה- DayInYear? התבקשנו בשאלה להשתמש באופרטור ~, אז כנראה שזה מותר.לגבי ההצהרה העתידית, המרצה שלי הזכירה משהו כזה, אבל אני לא זוכר באיזה מצב משתמשים בו.החלק שקשור לבעייה:baseDay.h---------class DayInYear;הגדרה עתידיתclass baseDay{protected:int day;public:... virtual DayInYear operator~()=0;};DayInMonth.h------------class DayInYear;//הגדרה עתידיתclass DayInMonth:public baseDay{public: ... DayInYear operator ~ ();};DayInYear.h-----------class DayInYear:public baseDay{public: DayInYear(int);//ctor DayInYear operator~();};DayInMonth.cpp--------------------DayInYear DayInMonth::operator ~()[color=red]{[/color] int dMonth[]={31,28,31,30,31,30,31,31,30,31,30,31}; DayInMonth counter=0; if(month!=1) { counter=31; for(int i=1;i<abs(month-1);i++) counter+=dMonth[i]; } counter+=day; return counter;}עכשיו אחרי הוספת פונקציה עתידית, הוא רושם לי ERROR על הסוגריים באדום והוא לא מזהה את DayInYear.ושאלה שאולי קשורה: בתוכנית, גם DayInMonth וגם DayInYear הם בנים לאותו אבא. בתוכנית הגדרתי קודם את DayInMonth - יכול להיות שזה מה שגורם לבעייה?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.