خطا در تعریف تابع عضو template خارج از کلاس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

خطا در تعریف تابع عضو template خارج از کلاس

+2 امتیاز

من می خوام بدنه تابع عضو کلاس رو خارج از کلاس بنویسم ولی برنامم چند صد تا ارور میده :))

چکار کنم ؟

template<typename _Type>
class MyClass
{
   MyClass();
   const MyClass<_Type>& operator*(const MyClass<_Type> &inc);
}

template<typename _Type>
const MyClass<_Type>& MyClass::operator*(const MyClass<_Type> &inc) // very much errors
{
   //something
}

 

سوال شده فروردین 12, 1393  بوسیله ی York (امتیاز 53)   4 7 11
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

به این صورت تغییرش بده .

راستی سمیکولون هم یادت رفته آخر کلاس بنویسی .

و یه چیز دیگه . این نوع operator ها رو بصورت برگشت-با-مقدار مینویسند .

 

#include <iostream>

using namespace std;

template<typename _Type>
class MyClass
{
   MyClass();
   const MyClass<_Type> operator*(const MyClass<_Type> &inc);
};
 
template<typename _Type>
const MyClass<_Type> MyClass<_Type>::operator*(const MyClass<_Type> &inc) // very much errors
{
   //something
}
int main ()
{
	return 0;
}

 

پاسخ داده شده فروردین 12, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد فروردین 12, 1393 بوسیله ی York
البته بعضی وقت ها با آدرس برگشت دادن هم لازمه تا وقتایی که شی const هم از کلاس ساخته میشه کد کامپایل بشه و درست کار کنه (نمونش هم برای نوشتن Iterator ها هستش )
یعنی معمولا  هر 2 شکل زیر این اپراتور رو همراه هم مینویسن .
    
  const type& operator*() const;
        type& operator*();
توی این operator ها باید یک مقدار termperory درست بشه که فک کنم برگردوندن Reference برای این operator ها درست نباشه .
ولی مثلا برای =+ باید با Reference برگردونده بشه .
درسته خیلی وقت ها لازم نیست refrence برگردونده بشه ولی بعضی جاها لازمه مثلا تعریف * در shared_ptr رو ببینید
http://goo.gl/OuQon8
منظورم استفاده های ریاضی بود که معمولا استفاده میشه .
درسته. از operator ها استفاده های دیگه ای با معنی های دیگه ای هم میشه کرد .
...