עבור לתוכן

operator overloading - error- need help plz

Featured Replies

פורסם

שלום אני מנסה להגדיר את האופרטור הבא:

שמוגדר בHEADER כך:

friend bool operator<(Event &ev_l,Event &ev_r);

ומימשתי אותו:


bool operator<(Event &ev_l,Event &ev_r)
{
if ( ev_l.GetDate() == NULL ) //events with no date will be at begining of the vector.
return true;
if ( ev_r.GetDate() == NULL )
return false;
if ( ev_l.GetDate()->GetYear() < ev_r.GetDate()->GetYear() )
return true;
if ( ev_l.GetDate()->GetMonth() < ev_r.GetDate()->GetMonth() )
return true;
if ( ev_l.GetDate()->GetDay() < ev_r.GetDate()->GetDay() )
return true;
return false;
}

אבל הבעיה שהוא נותן לי את הודעת השגיאה הבאה ואין לי מושג מה לעשות איתה - אשמח לעזרה

d:\program files\microsoft visual studio\vc98\include\algorithm(583) : error C2593: 'operator <' is ambiguous

        d:\program files\microsoft visual studio\vc98\include\algorithm(548) : see reference to function template instantiation 'void __cdecl std::_Unguarded_insert(class Event *,class Event)' being compiled

פורסם

בא לך לשתף מה השגיא או שאנחנו בקטע של ניחושים היום (אם כבר ניחושים אז נראה לי שה return type לא אמור להיות bool).

מטי.

פורסם

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

פורסם
  • מחבר

כתבתי את ההודעת שגיאה - היא בתחתית העמוד

פורסם

מוזר.... כתבתי את זה :


class a
{
public :
int b;
};
bool operator<(a &a,a &b)
{
;
}
int main(int argc, char* argv[])
{;}

ולי הוא לא נותן שגיאות...יכול להיות בגלל שאני עובד עם קומפיילר אחר (gcc), אבל לא נראה לי.

מטי.

פורסם

אוקי כמה שאלות:

מה זה הקלאס Event?

זה קלאס שאתה הגדרת?

איפה הצהרת על האופרטור בהדר? בתוך הקלאס או מחוץ לו?

איפה אתה קורא לפונקציה הזו?

פורסם

למה אתה עושה את האופרטור כפונקציית friend ולא כחלק מהclass?

מהודעת השגיעה אני אנחש שיש לך עוד אופרטור <, וגם שיש לך אפשרות לעשות casting מevent לטיפוס נתונים אחר כלשהו. בגלל זה הקומפיילר לא יודע באיזה אופרטור < להשתמש זה שאתה הגדרת כאן או זה שמתבצע לאחר cast של אחד מהארגומנטים.

פורסם
  • מחבר

תודה רבה לכולכם!

הקלס EVENTS זה אכן קלס שהגדרתי שיש INCLUDE להדר שלו כמובן.

ההצהרה של האופרטור הינה בהדר והמימוש בCPP. ובתוך הקלס.

אני קורא לפונקציה הזאת כאשר אני רוצה לעשות מיון SORT של <וקטור> אשר הינו מסוג EVENT, ולכן גם הוא לא מוגדר כחלק מהקלסס אלה כFRIEND כ צריך שוקטור יידע להשתמש בו.

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

(מקווה שאני ברור איכשהו :-[) ושוב תודה

פורסם

אני לא זוכר את הפיתרון, אבל נראה לי שהבעיה היא שאתה משתמש ב- event שלך בתוך וקטור שבו כבר יש אופרטור השוואה מ- template והקומפיילר לא יודע אם להשתמש באופרטור של ה- template או זה שאתה כתבת.

ארכיון

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

דיונים חדשים