خوشحالم که مشکلتون حل شد فقط من یه توضیحی در مورد این جمله "اینا رو از حالت friend در بیارید و بعد بصورت تک پارامتری باز نویسیش کنید " میدم چون احساس می کنم یکم گنگ گفتم
ببینید وقتی که شما یک تابع رو بصورت friend تعریف می کنید این تابع بصورت inline در میاد یعنی اینکه به نوعی از تعریف کلاس جدا می شه و وقتی که می خواید یک operator رو به این صورتی که می خواستین(یعنی با فرند) overload بکینید دقیقا مثل این هست که دارید در خارج از کلاس تابع رو overload می کنید بنابراین به دو پارامتر نیاز دارین پارامتر اول یعنی خود شی جاری کلاس و پارامتر دوم( که می تونه هر چیزی باشه) ولی اگه در داخل کلاس بدون friend یک تابع رو overload کنید دیگه به پارامتر اول نیازی نیست چون می تونید از طریف عملگر this بهش دسترسی داشته باشید
به این مثال دقت کنید اولی بدون friend هست پس به پارامتر اولی نیاز نداره چون از طریق this به هر چیزی که می خواد دسترسی داره ولی دومی با friend هست که به شی جاری کلاس نیاز داره
CBox operator +(const CBox& aBox) const
friend CBox operator+(const CBox& aBox, const CBox& bBox);
حالا من منظورم این بود که شما علامت << رو بصورت اول overload کنید که در اینصورت توابع friend حذف می شن و مشکل حل می شه