PDA

View Full Version : سوال: مشکل با سربارگذاری عملگرها (سی++)



drstrike
یک شنبه 13 تیر 1389, 10:37 صبح
سلام...
این برنامه رو با Borland C++‎‎ 3.1 تحت داس نوشتم.


#include <iostream.h>
#include <conio.h>
class ratio
{
friend ratio operator*(const ratio&, const ratio&);

public:

ratio(int n=0, int d=1): num(n), den(d) {}
ratio(const ratio& r);
ratio& operator=(const ratio& r) {num=r.num; den=r.den; return *this;}
void prt(){cout<<num<<" , "<<den<<endl;}

private:

int num,den;
};

ratio operator*(const ratio& x,const ratio& y)
{
ratio z(x.num * y.num, x.den * y.den);
return z;

}

int main()
{
clrscr();
ratio x(10,7),y(2,3),z;
z=x;
z.prt();
x=z*y;
x.prt();
getch();
return 0;
}


لینکر به برنامه گیر میده.این خطا رو میده:


Linker Error: Undefined Symbol Ratio::ratio(const ratio near&) in module test.cpp

کسی میدونه چی میگه؟ مشکل از کجاست؟

ممنون

حامد مصافی
یک شنبه 13 تیر 1389, 18:59 عصر
ratio& ratio::operator*(const ratio& x,const ratio& y)
{
// ...
}

drstrike
دوشنبه 14 تیر 1389, 07:53 صبح
خب حامد جان مشکل همین جاست!
واسه =Operator یه تایع دوست تعریف کردم. تابع دوست که به::Ratio نیاز نداره!
بعدشم اگه نوع بازگشتی از نوع ارجاع باشه، نمیشه یه متغیر محلی رو برگشت داد!

حامد مصافی
دوشنبه 14 تیر 1389, 17:57 عصر
عمده تاكيد من روي "ratio::" بود، بايد تابع مورد نظر را به عنوان يك پياده سازي از تابع تعريف شده در كلاس قيد كنيد.

drstrike
دوشنبه 14 تیر 1389, 23:43 عصر
بايد تابع مورد نظر را به عنوان يك پياده سازي از تابع تعريف شده در كلاس قيد كنيد


بازم نمیشه! اگه بخواهیم تابعی تو کلاس x (مثال) داشته باشیم، این تابع حداکثر یک پارامتر از نوع x می تونه داشته باشه!

مشکل حل شد:

بدنه تابع سازنده کپی رو تعریف نکرده بودم!!!

nedamhm
سه شنبه 15 تیر 1389, 01:14 صبح
salam bebakhshid man ye moshkeli darmorede class ha dar cpp daram age mitoonin komakam konin begin mamnoon

drstrike
سه شنبه 15 تیر 1389, 12:52 عصر
سلام دوست عزیز، به برنامه نویس خوش اومدی...
قوانین سایت رو مطالعه کنید:
- زبان تالار فارسیه!
- اگه سوال مربوط به همین تاپیک میشه،همینجا در غیر این صورت تو یه تاپیک جدا مطرح کنید
- برنامتون رو بزارید(اینجا کسی کد آماده نمی ده به کسی!)، اگه کسی تونست مشکلتون رو حل میکنه