انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: مشکل در کامپایل چند خط c++ در g++  (دفعات بازدید: 1973 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
مشکل در کامپایل چند خط c++ در g++
« : 06 اردیبهشت 1389، 12:21 ق‌ظ »
کلاس مجرد twodimentional را داریم . کلاس های ( square ) و ( circle ) را با وراثت public از آن گرفته ایم . هنگامی که در main هر دو سرآمد circle.h و square.h را می آورم هنگام کامپایل مینویسد :
ٍERROR:
redefinition of class twodimentional
 previous definition of ‘class twodimentional
چه دستوری باید نوشت تا تنها یکبار twodimentional را لحاظ کرده و این پیام را نمایش ندهد؟

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: مشکل در کامپایل چند خط c++ در g++
« پاسخ #1 : 06 اردیبهشت 1389، 09:34 ق‌ظ »
درست تو خط اول کلاس twodimentional دو خط پایین رو اضافه کن:
#ifndef TWODIMENTIONAL_H
#define TOWDIMENTIONAL_H

آخرین خط کلاس هم این رو بزار:
#endif
اینجوری این کلاس هر چند بار هم که include بشه تعریفش فقط یه بار تو برنامت میاد. خط دوم یه پرچم (flag) سراسری تعریف می‌کنه. خط اول در صورتی می‌زاری خط‌های بعدی کامپایل بشه که قبلا این پرچم تعریف نشده باشه.
اگه کلاست یه فایل جدا بقیر از هدر داره مثلا به اسم twodimentional.cpp یا twodimentional.cxx که تعریف توابع رو اونجا گذاشتی این تغییرات رو تو اونها هم اعمال کن. برای مثال تو خط اول اونها هم بنویس:
#ifndef TWODIMENTIONAL_CXX
#define TWODIMENTIONAL_CXX
خط آخر هم یادت نره، مثل بالا یه endif# بزار
این اسم‌ها اختیاریه ولی بهتره به اسم همون فایل باشه. اینجوری رسمه!

عنوان بهتری هم برای ارسالت بزار مثلا: جلوگیری از تکرار مجدد کلاس‌ها یا پیام خطایی که میاد ....  چیزی تو این مایه‌ها.
« آخرین ویرایش: 06 اردیبهشت 1389، 09:49 ق‌ظ توسط heresh »

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ به: مشکل در کامپایل چند خط c++ در g++
« پاسخ #2 : 06 اردیبهشت 1389، 12:34 ب‌ظ »
بله درست میفرمایید  باید پیش پردازنده های ifdef  و  define را میگذاشتم    سپاس از راهنمایی