בעיה מוזרה

פרפציל

New member
בעיה מוזרה

הגדרתי את האופרטור >> כחבר של מחלקה, אבל בכל זאת הקומפיילר (VS VC++ 6) נותן cannot access private members כשאני מנסה לגשת התוכו לשדות פרטיים. מישהו יכול להגיד לי מה פיספסתי ? (בקובץ המצורף)
 

eyalbd

New member
זה קוד תקין

למרות שאני הייתי עושה זאת אחרת. אגב הקוד מתקמפל ב-GCC א. למה להגביל >> operator רק ל ofstream. היה טוב יותר אם זה היה נתמך בכל ostream למשל cout
std::eek:stream& operator<<(std::eek:stream &ofs, const student& stdnt) { ofs<<stdnt.first_name; ofs<<stdnt.last_name; ofs<<stdnt.ID; return ofs; }​
ב. אולי ניסיון כזה בהכרזת ה friend
friend std::eek:fstream& operator<<(std::eek:fstream &, const student&);​
ג. אם גם זה לא עוזר אז תכתוב פונקציה חברה שמדפיסה ל-ostream למשל כך:
void student::write_on(std::eek:stream& os) { os << first_name << " " << last_name << endl << ID; }​
ואז אופרטור >> שמשתמש בה:
std::eek:stream& operator<<(std::eek:stream &os, const student& stdnt) { stdnt.write_on(os); return os; }​
בשיטה הזאת גם לא צריך friend
 

eyalbd

New member
GCC=GNU Compiler Collection

זהו קומפיילר (בעצם כמה) לכמה שפות: ++C/C, פורטרן, ג'אווה, אדה, פסקל, Objective-C ועוד כמה. הוא קומפיילר חופשי ( == קוד פתוח וגם חינם) רץ על מגוון עצום של מערכות הפעלה (כל הUNIX-ים, חלונות, DOS, מק ועוד) הסביבה ++dev-c משתמשת ב-GCC לקומפילציה בכמה מערכות הוא משמש כקומפיילר שאיתו בונים את המערכת למשל לינוקס, משפחת BSD וגם MacOS-X של apple נחשב כקומפיילר טוב מאד. קרא עוד באתר של GCC
 
למעלה