نمایش نتایج 1 تا 8 از 8

نام تاپیک: تعریف کلاس و خطای multiply defined

  1. #1

    تعریف کلاس و خطای multiply defined

    سلام
    من یه کلاس دارم به صورت زیر :

    #ifndef _TEST_H_
    #define _TEST_H_

    class test {
    public :
    }test1, test2, test3;


    #endif


    میخوام این کلاس ( که داخل فایل test.h هستش ) رو داخل یه فایل دیگه ( uart.h ) و فایل main استفاده کنم و فقط فایل رو include کنم و از شیء های از پیش تعریف شده استفاده کنم - مثلا از شیء test1 در فایل main استفاده کنم و از test2 در فایل uart.h ولی خطای زیر داده میشه بهم :

    .\Objects\1.axf: Error: L6200E: Symbol test1 multiply defined (by uart.o and test.o).
    .\Objects\1.axf: Error: L6200E: Symbol test2 multiply defined (by uart.o and test.o).
    .\Objects\1.axf: Error: L6200E: Symbol test3 multiply defined (by uart.o and test.o).



    برا حل این مورد تو فایل test.h اومدم اون object های از پیش تعریف شده رو static تعریف کردم که خب خطای فوق رفع شد ولی نمیدونم این کار درسته یا نه.

    #ifndef _TEST_H_
    #define _TEST_H_

    class test {
    public :
    };

    static test test1;
    static test test2;
    static test test3;

    #endif
    آخرین ویرایش به وسیله md3848 : دوشنبه 28 آبان 1397 در 01:03 صبح

  2. #2
    کاربر دائمی آواتار farhad_shiri_ex
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    37
    پست
    709

    نقل قول: تعریف کلاس و خطای multiply defined

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    سلام
    من یه کلاس دارم به صورت زیر :

    #ifndef _TEST_H_
    #define _TEST_H_

    class test {
    public :
    }test1, test2, test3;


    #endif


    میخوام این کلاس ( که داخل فایل test.h هستش ) رو داخل یه فایل دیگه ( uart.h ) و فایل main استفاده کنم و فقط فایل رو include کنم و از شیء های از پیش تعریف شده استفاده کنم - مثلا از شیء test1 در فایل main استفاده کنم و از test2 در فایل uart.h ولی خطای زیر داده میشه بهم :

    .\Objects\1.axf: Error: L6200E: Symbol test1 multiply defined (by uart.o and test.o).
    .\Objects\1.axf: Error: L6200E: Symbol test2 multiply defined (by uart.o and test.o).
    .\Objects\1.axf: Error: L6200E: Symbol test3 multiply defined (by uart.o and test.o).



    برا حل این مورد تو فایل test.h اومدم اون object های از پیش تعریف شده رو static تعریف کردم که خب خطای فوق رفع شد ولی نمیدونم این کار درسته یا نه.

    #ifndef _TEST_H_
    #define _TEST_H_

    class test {
    public :
    };

    static test test1;
    static test test2;
    static test test3;

    #endif
    بخش اول دستورات که کلا خطای دستوری تلقی میشه یعنی نمی تونی تعریف چندگانه از کلاس داشته باشی! اگر هم که بحث مالکیت چندگانه از کلاس را می خواهید که اصلا راهش این نیست. البته نیازی هم به تعریف چندگانه نیست شما از روی یک کلاس می تونید آبجکتهای متمایز زیادی را ایجاد کنید.
    برای بخش دوم هم استاتیک تعریف کردن یک کلاس کار اشتباهی نیست!
    ولی اصلا توصیه نمیشه چون با این کار شما آبجکت ها را روی heap ذخیره میکنید که خوب حافظه heap هم محدودیت داره!
    و نکته مهمتر این هست که زمانی که نیاز به استفاده از یک آبجکت داشتید می تونید اون را ایجاد کنید لازم نیست که آبجکت های استاتیک ایجاد کنید.
    پس در زمان مناسب آبجکتها را تعریف کنید و استفاده کنید مثلا توی همون تابع main این کار را انجام بدید.

  3. #3

    نقل قول: تعریف کلاس و خطای multiply defined

    خب من میخوام تو کلاسم ( کلاس test ) یه شیء تعریف کرده باشم و تو پروژه و فایل های دیگه از همون شی از پیش تعریف شده استفاده کنم و دیگه مجبور نشم تو دوتا فایل دوتا شیء جدا تعریف کنم

  4. #4
    کاربر دائمی آواتار farhad_shiri_ex
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    37
    پست
    709

    نقل قول: تعریف کلاس و خطای multiply defined

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    خب من میخوام تو کلاسم ( کلاس test ) یه شیء تعریف کرده باشم و تو پروژه و فایل های دیگه از همون شی از پیش تعریف شده استفاده کنم و دیگه مجبور نشم تو دوتا فایل دوتا شیء جدا تعریف کنم
    اگر به یک شی یکتا unique نیاز داری بله استاتیک می تونی تعریف کنی و در کلاسهای دیگه ازش استفاده کنی!
    اگر نه هریک از شی ها باید ماهیت جداگانه داشته باشند دیگه استاتیک فایده ای نداره باید یک کلاس Abstract factory درست کنی که بتونه از کلاس test برات شی ایجاد کنه و بعد هرجا که خواستی شی جدید ایجاد کنی کافی که به کلاس factory بگی برات ایجاد کنه اینطوری نیازی نیست هر بار از کلاس test شی ایجادکنی البته این روش هم خیلی بهینه است هم tight coupling هم تا حد زیادی کمتر کردید و البته خیلی هم maintainable از روشی هست که هربار بخواهی یک شی جدید از روی کلاس test ایجاد کنید

  5. #5

    نقل قول: تعریف کلاس و خطای multiply defined

    بک مثال ( نمونه کد ساده ) میشه بزنید؟ چه کاریه یه فایل جدا برای ایجاد شیء ایجاد کنیم - چطوری میخواد این فایل کمک کنه؟ این برنامه نویسی هم هرچی میری جلو میبینی دانسته هات داره کمتر میشه که

  6. #6
    کاربر دائمی آواتار farhad_shiri_ex
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    37
    پست
    709

    نقل قول: تعریف کلاس و خطای multiply defined

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    بک مثال ( نمونه کد ساده ) میشه بزنید؟ چه کاریه یه فایل جدا برای ایجاد شیء ایجاد کنیم - چطوری میخواد این فایل کمک کنه؟ این برنامه نویسی هم هرچی میری جلو میبینی دانسته هات داره کمتر میشه که
    پیشنهاد میکنم تو این سایت عضو شوید و به این مقاله ها هم یک نگاه بندازید خیلی از سوالات تون پاسخ داده میشه

    http://bit.ly/2AxVVLO

  7. #7

    نقل قول: تعریف کلاس و خطای multiply defined

    انجمشو هم پس راه انداخت - حله - آقا مممنون از شما ( این گزینه تشکر پست ها انگار حذف شده - برا من نمایش داده نمیشه - مرورگر اپرا )

  8. #8
    کاربر دائمی آواتار farhad_shiri_ex
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    37
    پست
    709

    نقل قول: تعریف کلاس و خطای multiply defined

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    انجمشو هم پس راه انداخت - حله - آقا مممنون از شما ( این گزینه تشکر پست ها انگار حذف شده - برا من نمایش داده نمیشه - مرورگر اپرا )
    خواهش میکنم !
    کلید تشکر حذف نشده که! حذفش کردند!!! فکر کنم دیدن همون تشکر خشک و خالی هم اضافه است.
    چه کاری اصلا این فرهنگ را که سالها براش زحمت کشیده بودن و جا انداخته بودن که حداقل میفهمیدیم چه کسانی ارزش دارند گه جوابشونو بدی وقت براشون بذاری و چه کسانی ندارند.!

تاپیک های مشابه

  1. Exception in thread "main"
    نوشته شده توسط zzyaser در بخش برنامه‌نویسی جاوا
    پاسخ: 0
    آخرین پست: پنج شنبه 20 تیر 1392, 16:55 عصر
  2. سوال: "كريستال ريپورت" يا "سیمولات" يا "كامپوننت پيشفرض دات نت" ... ؟
    نوشته شده توسط rahe behtari hast در بخش C#‎‎
    پاسخ: 7
    آخرین پست: سه شنبه 13 فروردین 1392, 23:47 عصر
  3. پاسخ: 3
    آخرین پست: چهارشنبه 21 مرداد 1388, 12:11 عصر
  4. نشان دادن تعداد كارمندان "رسمي" و "قرادادي"و"شركتي" كه در بانك ذخيره اند
    نوشته شده توسط ali_abbasi22145 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: سه شنبه 17 دی 1387, 18:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •