در صورتی که تعاریف توابع عضو کلاس (class function member definition) را در همان فایل anothertest.h قرار دهیم برنامه بدون مشکلی اجرا میشود. اما در صورتی که تعاریف توابع را به داخل فایل anothertest.cpp انتقال دهیم ، برنامه کامپایل ولی با خطای لینکر مواجه میشود.
دلیل این اتفاق چیست ؟
--ویرایش : پس از جستجویی که انجام دادم متوجه شدم که به دلیل اینکه کامپایلر برای هر نمونه از template هایی که ما نیاز داریم یک نسخه جداگانه درست میکند. مثلا در کد زیر. کد باید به این صورت تغییر کند :
class TemplateTest{
private :
int ClassVariable;
public :
TemplateTest(const int& input);
int ReturnClassVariable(void);
};
Git Diff
#ifndef ANOTHERTEST_H
#define ANOTHERTEST_H
-template <class AnotherType>
class TemplateTest{
private :
- AnotherType ClassVariable;
+ int ClassVariable;
public :
- TemplateTest(const AnotherType& input);
- AnotherType ReturnClassVariable(void);
+ TemplateTest(const int& input);
+ int ReturnClassVariable(void);
};
#endif // ANOTHERTEST_H
و از آنجایی که تعاریف کلاس ها در فایل دیگری قرار دارد. کامپایلر فراموش به نمونه سازی از آنها میکند. و به این دلیل است که با خطای لینکر مواجه میشویم. و برای رفع این مشکل باید تعاریف توابع را نیز در فایل anothertest.h قرار بدهیم.
با این اوصاف آیا روش دیگه ای هست که از template ها در فایل های جداگانه استفاده کنیم ؟
سلام
در صورتی که تعاریف توابع عضو کلاس (class function member definition) را در همان فایل
anothertest.h
قرار دهیم برنامه بدون مشکلی اجرا میشود. اما در صورتی که تعاریف توابع را به داخل فایلanothertest.cpp
انتقال دهیم ، برنامه کامپایل ولی با خطای لینکر مواجه میشود.دلیل این اتفاق چیست ؟
--ویرایش : پس از جستجویی که انجام دادم متوجه شدم که به دلیل اینکه کامپایلر برای هر نمونه از
template
هایی که ما نیاز داریم یک نسخه جداگانه درست میکند. مثلا در کد زیر. کد باید به این صورت تغییر کند :Git Diff
و از آنجایی که تعاریف کلاس ها در فایل دیگری قرار دارد. کامپایلر فراموش به نمونه سازی از آنها میکند. و به این دلیل است که با خطای لینکر مواجه میشویم. و برای رفع این مشکل باید تعاریف توابع را نیز در فایل anothertest.h قرار بدهیم.
با این اوصاف آیا روش دیگه ای هست که از
template
ها در فایل های جداگانه استفاده کنیم ؟anothertest.h
anothertest.cpp
main.cpp
به اشتراک گذاری این ارسال
لینک به ارسال
به اشتراک گذاری در سایت های دیگر