انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: doomhammer65ir در 06 اردیبهشت 1389، 12:21 قظ
-
کلاس مجرد twodimentional را داریم . کلاس های ( square ) و ( circle ) را با وراثت public از آن گرفته ایم . هنگامی که در main هر دو سرآمد circle.h و square.h را می آورم هنگام کامپایل مینویسد :
ٍERROR:
redefinition of class twodimentional
previous definition of ‘class twodimentional
چه دستوری باید نوشت تا تنها یکبار twodimentional را لحاظ کرده و این پیام را نمایش ندهد؟
-
درست تو خط اول کلاس twodimentional دو خط پایین رو اضافه کن:
#ifndef TWODIMENTIONAL_H
#define TOWDIMENTIONAL_H
آخرین خط کلاس هم این رو بزار:
#endif
اینجوری این کلاس هر چند بار هم که include بشه تعریفش فقط یه بار تو برنامت میاد. خط دوم یه پرچم (flag) سراسری تعریف میکنه. خط اول در صورتی میزاری خطهای بعدی کامپایل بشه که قبلا این پرچم تعریف نشده باشه.
اگه کلاست یه فایل جدا بقیر از هدر داره مثلا به اسم twodimentional.cpp یا twodimentional.cxx که تعریف توابع رو اونجا گذاشتی این تغییرات رو تو اونها هم اعمال کن. برای مثال تو خط اول اونها هم بنویس:
#ifndef TWODIMENTIONAL_CXX
#define TWODIMENTIONAL_CXX
خط آخر هم یادت نره، مثل بالا یه endif# بزار
این اسمها اختیاریه ولی بهتره به اسم همون فایل باشه. اینجوری رسمه!
عنوان بهتری هم برای ارسالت بزار مثلا: جلوگیری از تکرار مجدد کلاسها یا پیام خطایی که میاد .... چیزی تو این مایهها.
-
بله درست میفرمایید باید پیش پردازنده های ifdef و define را میگذاشتم سپاس از راهنمایی