בעיה בהעמסת operator>>

desertboy

New member
בעיה בהעמסת operator>>

כאשר אני מנסה להעמיס את ה operator>> r. מתקבלת הודעת השגיאה הנ"ל. operation.h:34: error: `std::istream& Operation::eek:perator>>(std::istream&, std::string&)' must take exactly one argument למיטב הבנתי ניתן וצריך להעביר שני משתנים (אחרת האופרטור חסר משמעות ביצועית) לכן לא ברור כלל איפה הטעות (הקומפיילר הוא gcc version 3.3.3(. ההכרזה היא כזאת. std::istream& operator>>(std::istream& in,std::string& input);
 

desertboy

New member
ועכשיו עם ישור לימין

הודעת השגיאה היא: operation.h:34: error: `std::istream& Operation::eek:perator>>(std::istream&, std::string&)' must take exactly one argument וההכרזה היא:
std::istream& operator>>(std::istream& in,std::string& input);​
 

vinney

Well-known member
נראה לי אתה עושה משהו לא בסדר

למה הפרמטר השלישי זה STRING? זה לא אמורה להיות מחלקה שלך? אחרת קצת חסר טעם מה שאתה עושה...
 

desertboy

New member
הכונה היתה ישור לשמאל

וניסיון נוסף השגיאה היא
operation.h:34: error: `std::istream& Operation::eek:perator>>(std::istream&, std::string&)' must take exactly one argument​
וההכרזה היא:
std::istream& operator>>(std::istream& in,std::string& input);​
 

Pembelton

New member
הגדרת את האופרטור בתור

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

desertboy

New member
אני חושב שהבנתי

בעצם מה מה שרציתי לעשות זה את הדבר הבא:
friend std::istream& operator>>(std::istream& in,Operation& input);​
ואז למעשה קיבלתי העמסה לאופרטור << עם אובייקטים מטיפוס Operation ? תודה לשניכם (הפורום פה הוא אחד המהירים שראיתי )
 

Pembelton

New member
עדיף שאת מה שרצית לעשות תגיד במילים

ולא בקוד, כי אחרת אנחנו מנחשים לפי הקוד. אני אעשה זאת בשבילך (במידה והבנתי את מה אתה רוצה מתוך הקוד) אתה רוצה להעמיס את <<OPERATOR עם אוביקטים מסוג OPERATION? אם כן, אז הנה שלד של הקוד
class Operation { // Data members... public: Operation() { } void read(std::istream& in) { // read data from 'in' } // More member functions... }; inline std::istream& operator>>(std::istream& in, Operation& o) { o.read(in); return in; }​
 
למעלה