مشاهده نسخه کامل
: کار با قالب ها در Overload استريم ها
sin2x=2sinxcosx
30-05-2009, 21:26
سلام . اين قطعه کد من چه ايرادي داره ؟ تا آخر کامپايل ميشه بعد Link error و از اين حرفه ميده .
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Link error ربطی به ایراد در کد شما نداره بلکه مربوط به این میشه که کتابخانه ای را مسیری رو که لینکر جهت ساختن فایل نهایی اجرایی لازم داره رو یا ندادی یا اشتباه دادی.
Mehran NZ
31-05-2009, 11:42
سلام برادر
والا منکه نفهمیدم این کدتون چی هست و می خواستید چیکار کنید -بهتر بود کل کد رو می ذاشتید و اون قسمتی
که مشکل داشتید و جدا می کردید-ولی کد و به این صورت تغییر دادم درست کار می کنه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
sin2x=2sinxcosx
31-05-2009, 18:50
اين کل کدهاي من :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين هم ارور ها :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا اين Link Error رو چجوري برطرف کنيم ؟ چرا براي برنامه هاي ديگه نمي گيره براي اين مي گيره ؟
من که احتمال ميدم مال سربارگذاري جريان هاي ورودي و خروجي هستش . چون با زياد کردن اونا ارور ها هم بيشتر ميشن .
Mehran NZ
31-05-2009, 19:06
اشتباه شد....
sin2x=2sinxcosx
31-05-2009, 20:00
نه برنامه ام تحت دات نت نيست دوست عزيز
همش از کتابخانه استاندارده
Mehran NZ
31-05-2009, 20:13
اشتباه شد....
sin2x=2sinxcosx
31-05-2009, 20:22
تحت دات نت کامپايل نمي کنم .
Win 32 Console Application .
از کجا حدس مي زنين تحت دات نته ؟
Mehran NZ
31-05-2009, 21:45
برادر مشکل از این دو خط هست اینا رو از حالت friend در بیارید و بعد بصورت تک پارامتری باز نویسیش کنید برای اطلاعات بیشتر به MSDN برای خطای LNK2019 مراجعه کنید (احتمالا این رو خودتون هم می دونید که اگه تابعی در یک کلاس بصورت friend نوشته بشه در واقع یک نوع تابع inline برای اون کلاس هست)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اگه همین کد رو بر روی بورلند کامپایل کنید این مشکل برطرف می شه اما یه سری خطای دیگه می گیره مثلا باید بجای typename از واژه class استفاده بشه من کد رو بصورت زیر تغییر دادم و روی بورلند کامپایل و اجرا کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم کدی که بر روی Visual Studio هم اجرا می شه البته با بیرون آوردن اون توابع از کلاس البته همون طور که گفتم با تغییر در شیوه overload کردن اوپراتورها می تونید دوباره تعریفشون و به کلاس برگردونید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
sin2x=2sinxcosx
31-05-2009, 23:02
خيلي ممنون دوست عزيز . حل شد . پس نبايد Interface از Implementation جدا بشه . ضمنا چون ديگه ostream و istream براي کلاس ، friend نيستن پس نمي تونن به داده هاي private دسترسي داشته باشن . پس اجبارا بايد اونا رو هم به public بياريم .
خلاصه اين شد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بازم ممنون ...
Mehran NZ
31-05-2009, 23:37
خوشحالم که مشکلتون حل شد فقط من یه توضیحی در مورد این جمله "اینا رو از حالت 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 حذف می شن و مشکل حل می شه
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.