עבור לתוכן

C++ friend function

Featured Replies

פורסם

הצהרתי על פונקציות חברות ע"מ להשתמש באופרטורים >> ו<< לקלוט מחרוזות:


friend ostream& operator<<(ostream &os, String&);
friend istream& operator>>(istream &is, String&);

וממשתי:


ostream & operator<<(ostream&os, String&s)
{
os<<s;
return os;
}

istream & operator>>(istream&is, String&s)
{
is>>s;
return is;
}

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


'ostream' : 'friend' not permitted on data declarations
'ostream' : missing storage-class or type specifiers
'ostream' : unable to resolve function overload

מה הבעיה?????

פורסם

os<<s;

תנסי אולי לעשות

os<<s.str;

את מנסה להדפיס בידיוק את מה ששלחת. כנל עבור הISTREAM.

וכדאי לתת CONST STRING&S

פורסם

הממ

יעזור אם תכתבי פה את כל הקוד שלך. משהו אומר לי שהצהרת על הפונקציה במקום לא טוב...

פורסם

נראה לי שהבעיה כאן:

ostream & operator<<(ostream&os, String&s)

{

os<<s;

return os;

}

וההצהרה צריכה להיות בתוך המחלקה של String.

פורסם
  • מחבר

תודה. שכחתי לרשום ; using namespace std

:hat:

<האם יש בעיה לרשום פלט בקובץ ההצהרה??? לדוגמא פונקציה שמחפשת איבר ולא מוצאת תוציא פלט not found>

פורסם

יש כאן משהו שאני לא מבין...

איפה הצהרת על FRIENDS? באיזו מחלקה?

בקשר לשאלה שלך - בדרך כלל מפרידים בין ההצהרות למימוש(אלא אם זה פונ של שורות בודדות שלא אכפת לך לשים אותה כINLINE).

בנוסף אם את רוצה לרשום שהאיבר לא קיים, כדאי לעשות את זה מחוץ למתודות. כלומר, הפונ שלך תחזיר את האיבר במקרה שהוא קיים ונמצא, אחרת, יחזיר NULL. מי שקרא למתודה יבדוק אם זה NULL, ואם כן, ידפיס שהאיבר לא קיים.

פורסם

זו הגדרה רקורסיבית, התוכנית תיכנס ללולאה אינסופית

פורסם

בידיוק.

ארכיון

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

דיונים חדשים