עבור לתוכן

עזרה ב CPP - הורשה

Featured Replies

פורסם

בוקר טוב לכולם!

יש לי עבודה לעשות ב 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]

פורסם

הודעת השגיאה המדוייקת תלויה בקומפיילר, אבל סביר להניח שהבעיה היא שהקומפיילר לא מכיר את DAYINYEAR בזמן ההצהרה על האופרטור.

חוץ מזה אל תשתמש ב-~ לפעולה הזו. תשתמש באופרטור המרה:


operator DAYINYEAR () { return ......; }

פורסם

אתה יכול דווקא להגדיר באבא פונקציה וירטואלית שתחזיר DAYINYEAR, באמצעות ההצהרה הבאה לפני האבא:

class DAYINYEAR;

שים לב שזה בעצם רק מצהיר על קיומו של הקלאס DAYINYEAR, ולא מגדיר מהו בדיוק (בשביל זה יש את ההגדרה המלאה של הקלאס שתבוא בנפרד, וזה יהיו תפקידו של הlinker לקשר ביניהם).

את הבעיה עצמה לא ממש הבנתי, אז אשמח אם תוכל להעלות את הקוד ולהצביע על הבעיה בדיוק.

חוץ מזה, הערה קטנה - רק קבועים נהוג לרשום באותיות גדולות. יותר "יפה" לקרוא לקלאסים שלך DayInYear, DayInMonth ו-DayInWeek.

פורסם

אפשר להשתמש ב-forward declaration רק אם משתמשים ברפרנס או מצביע למחלקה המקורית. אחרת צריך את ההגדרה המלאה.

פורסם
  • מחבר

קודם כל, תודה על התגובות והעזרה.

דבר שני, את ההודעה הזו כתבתי קודם בשני חלקים בגלל זה ה- 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 - יכול להיות שזה מה שגורם לבעייה?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים