الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

template classes and implementation hiding

مغلق
بدأه PerfectStranger في 15 مايو 2004 · 4 رد · 567 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندما نعرف أي class يمكننا فصل تعريفه عن ال implementation الخاصة بتوابعه بأن نضع التعريف في ملف header file و نضع ال implementation في cpp file و نقوم بتضمين الملف الرأسي في ملف ال source كما يعلم الجميع

سؤالي .. لما يكون ال class معرف ك template لم أستطع القيام بالعملية البديهية السابقة !!! و الأخطاء الناتجة عن ذلك هي ليست compile error و لكن linking errors

مثلا : جرب في MS visual studio تحقيق التالي:

//test.h file
template <class T>
class nothing
{
static void do_nothing();
};

//test.cpp file
#include "test.h"
temlpate <class T>
void nothing<T>::do_nothing()
{}

سوف ينجم عن هذا النص link error unresolved external symbol

المشكلة يمكن أن تحل بوضع النص المصدري source مع الملف الرأسي و لكن هذا ما لا أريده

الحل ؟؟؟؟؟

شكرا

#2

السلام عليكم,,

الكود يعمل بشكل جيد !!!

أرفق لي ملف ال dsw الخاص بالمشروع ,, لأاعرف كيف وضعت الملفات ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم

شكرا أخي النشيط HGB

هذا هو المشروع مرفق

بالمناسبة ؟؟ كيف الكود يعمل عندك !!!!!! هل غيرت أي شئ باعدادات ال linker ؟

شكرا

sdfg.zip

#4

السلام عليكم ,,

أنا آسف لم أفهمك بشكل صحيح يوم أمس ,, فتوقعت أن لديك في كل المشروع ملفين فقط ,, واحد ال cpp الذي به تعريفات الدوال التي في الفئة وبه أيضا الدالة main ,, ليس كما في حالتك هنا الدالة main في ملف ثالث ,,

المهم لحل المشكلة افعل التالي ,,

يجب عليك للأسف أن تعرف كل لأنواع التي تتوقع أن يستخدمها المستخدمون لاحقا ,,

نعرف بالطبع أن ال template يمكن أن تكون من نوع int float long double وغيرها من الأنواع الأساسية ,, وأيضا يمكن أن تكون من نوع جديد يعرفه المستخدم ,, مثلا عرف المستخدم class جديد في البرنامج ,, يجب أن تضع ذلك في الحساب ,,

هنا سأفترض أن المستخدم سيستعمل احدى الأنواع int float char فقط ,,

عندها في ملف ال test.cpp ,, وهو الملف الذي عرفت فيه دوال الفئة ,, اكتب في الأعلى التالي :

template  class  nothing<int>; 
template  class  nothing<float>; 
template  class  nothing<char>;

وسيعمل الكود لو عرفت في ال main كائن جديد بحيث تمرر للقالب أي نوع من الانواع int float char ,, أما اذا عطيت قيمة غير ذلك لكائن القالب ,, سيعطي نفس رسالة الخطأ السابقة ,,

لذا للضمان أعطه كل الانواع الاساسية في ملف ال cpp ,, والله يعين مشكلة الفئات التي يعرفها المستخدم بنفسه ,,

لكن لكل مشكلة حل :)

فلا تيأس ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

الله يجزيك الخير يا أخي

الحمد لله أنا أعرف شو الأنماط الممكنة في برنامجي وهو برمامج ضغط ملفات أي أن النمط هو char أو short )unicode)

ولكن أتوقع أنه من الغير ممكن سرد كل الأنماط الممكنة و إن شاء الله نجد الحل

شكرا

هذا الموضوع مغلق.

مواضيع مشابهة