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

نام تاپیک: خطا هنگام کامپایل

  1. #1

    خطا هنگام کامپایل

    سلام

    test.h

    #include <string>
    #include <cstring>
    #ifndef TEST_H
    #define TEST_H
    using namespace std;
    class Test
    {
    private:
    string name ;
    public:
    Test(string n);
    void show();
    void set();
    };

    #endif // TEST_H


    test.cpp

    #include <iostream>
    #include "test.h"


    using namespace std;
    Test::Test(string n): name(n) {}
    void Test::set()
    {
    cout << "plz enter name :\n" ;
    getline(cin,name);
    if(name.length() >= 25 )
    name = name.substr(0,25);
    }

    void Test::show()
    {
    cout << "Your name : " << name << endl ;
    }


    main

    #include <iostream>
    #include "test.h"


    using namespace std;

    int main()
    {
    Test t1("Test"), t2 ;
    t2.set();
    t1.show();
    t2.show();

    return 0;
    }


    توی main خط 9 ارور میده :
    /home/test/Documents/Test/Test/main.cpp:9: error: no matching function for call to 'Test::Test()'

  2. #2
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    آیا این کلاس شما از کلاس دیگه ای به ارث برده که سازندشو صدا زدی؟
    Test::Test(string n): name(n) {}


    و این که t2 رو به این شکل تعریف کن

    test t2("")


    یا حتما یه سازنده تعریف کن که پارامتر نگیره....

  3. #3

    نقل قول: خطا هنگام کامپایل

    این که :

    Test::Test(string n): name(n) {}


    مشکلی نداره ! مشکل از همون سازنده بود که باید تعریف می کردم :

    Test::Test(): name("") {}

  4. #4

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    آیا این کلاس شما از کلاس دیگه ای به ارث برده که سازندشو صدا زدی؟
    Test::Test(string n): name(n) {}


    و این که t2 رو به این شکل تعریف کن

    test t2("")


    یا حتما یه سازنده تعریف کن که پارامتر نگیره....
    ایول سرعت عمل داشتم جواب میدادم دیدم پیشدستی فرمودین.

  5. #5

    نقل قول: خطا هنگام کامپایل

    مبتدی هستم یکم در مورد اشکال اول بگین منم متوجه بشم !
    تشکر

  6. #6
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    مشکلی نداره ! مشکل از همون سازنده بود که باید تعریف می کردم :

    Test::Test(): name("") {}
    باید به این شکل تعریف کنی

    Test::Test(): name() {}

  7. #7

    نقل قول: خطا هنگام کامپایل

    اشکال که نه ولی لزومی به استفاده از متغییر name وجود نداشت بدون اون هم میتونستید کارتون رو جلو ببرید

  8. #8

    نقل قول: خطا هنگام کامپایل

    بابا موشک بمب اتم انرژی هسته ای هر چی بگم کمه ایول به این سرعت

  9. #9
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    مبتدی هستم یکم در مورد اشکال اول بگین منم متوجه بشم !
    تشکر
    نه اشکال نیست اگه کلاسی به اسم name داشته باشی کد باید درست کار کنه
    تو کد زیر بعد از ":" سازنده کلاسی فراخوانی میشه کلاس test ازش ارث برده شده ولی برای این که کد کامل بشه باید تعریف کلاس به شکل زیر تغییر کنه

    class Test : public name
    {
    ...
    ...
    ...

  10. #10

    نقل قول: خطا هنگام کامپایل

    حالا سوال !

    تفاوت این 2 نوع سازنده چیه ؟
    مثلا :
    Test(): Var(value) {}


    با :

    Test()
    {
    Var = value ;
    }

  11. #11

    نقل قول: خطا هنگام کامپایل

    نه اشکال نیست اگه کلاسی به اسم name داشته باشی کد باید درست کار کنه
    من فقط همون کلاس Test رو دارم و هیچ چیز دیگه ای نیست و درست کار کرد

  12. #12
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    حالا سوال !

    تفاوت این 2 نوع سازنده چیه ؟
    مثلا :
    Test(): Var(value) {}


    با :

    Test()
    {
    Var = value ;
    }
    این دوتا یه چیز نیست کلا با هم فرق میکنن

  13. #13

    نقل قول: خطا هنگام کامپایل

    توی اولی مقدار value توی var قرار میگیره اگه اشتباه نکنم

  14. #14
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    من فقط همون کلاس Test رو دارم و هیچ چیز دیگه ای نیست و درست کار کرد
    بعضی کامپایلر ها نادیده میگیرن !

  15. #15

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    این دوتا یه چیز نیست کلا با هم فرق میکنن
    اولی مقدار دهی اولیه می کنه ولی دومی از انتساب استفاده می کنه .

  16. #16

    نقل قول: خطا هنگام کامپایل

    حالا از کدوم و کجا استفاده می شه ؟

    لینکشو پیدا کردم کسی خلاصه میدونه ؟

    http://www.parashift.com/C++‎-faq-lite/init-lists.html

  17. #17

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    اولی مقدار دهی اولیه می کنه ولی دومی از انتساب استفاده می کنه .
    خوب اینم همونی شد که خدمتتون عرض کردم

  18. #18

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    حالا از کدوم و کجا استفاده می شه ؟

    لینکشو پیدا کردم کسی خلاصه میدونه ؟

    http://www.parashift.com/C++‎-faq-lite/init-lists.html
    لینکتون باز نمیشه

  19. #19

    نقل قول: خطا هنگام کامپایل

    نمی دونم چرا باز نمیشه من از لینک زیر لینکشو پیدا کردم که پیشنهاد داده بودن :


    http://stackoverflow.com/questions/5...wo-constructor


    Read this FAQ : Should my constructors use "initialization lists" or "assignment"?

  20. #20
    کاربر دائمی آواتار mahak006
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    کرج
    سن
    32
    پست
    278

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    باید به این شکل تعریف کنی

    Test::Test(): name() {}
    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    نه اشکال نیست اگه کلاسی به اسم name داشته باشی کد باید درست کار کنه
    تو کد زیر بعد از ":" سازنده کلاسی فراخوانی میشه کلاس test ازش ارث برده شده ولی برای این که کد کامل بشه باید تعریف کلاس به شکل زیر تغییر کنه

    class Test : public name
    {
    ...
    ...
    ...
    نقل قول نوشته شده توسط smemamian مشاهده تاپیک
    حالا سوال !

    تفاوت این 2 نوع سازنده چیه ؟
    مثلا :
    Test(): Var(value) {}


    با :

    Test()
    {
    Var = value ;
    }
    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    این دوتا یه چیز نیست کلا با هم فرق میکنن

    البته شاید یه سوء تفاهمی شده باشه .
    شما به این ترتیب هم می تونید به یه آبجکت کلاس ، مقدار بدید . همین طور بره پاس دادن آرگومان های تابع سازنده به سازنده ی کلاسی که ازش مشتق گرفتیم هم به کار می ره :

    test(string Name,void *Parent,int x):
    name(Name),parent(Parent),type(Parent,x)
    {
    ...
    }

    تو مثال بالا که چندین بار ازش استفاده کردم ، name آبجکت کلاس هست که بهش رشته ی Name اختصاص داده می شه .parent و Parent که بهش داده می شه هم همین وضعیت رو دارن . اما type سازنده کلاسی هست که test مشتق اون کلاسه .

  21. #21
    کاربر دائمی آواتار aidinMC
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    یه گوشه دنج از هارد!
    پست
    129

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط mahak006 مشاهده تاپیک
    البته شاید یه سوء تفاهمی شده باشه .
    شما به این ترتیب هم می تونید به یه آبجکت کلاس ، مقدار بدید . همین طور بره پاس دادن آرگومان های تابع سازنده به سازنده ی کلاسی که ازش مشتق گرفتیم هم به کار می ره :

    test(string Name,void *Parent,int x):
    name(Name),parent(Parent),type(Parent,x)
    {
    ...
    }

    تو مثال بالا که چندین بار ازش استفاده کردم ، name آبجکت کلاس هست که بهش رشته ی Name اختصاص داده می شه .parent و Parent که بهش داده می شه هم همین وضعیت رو دارن . اما type سازنده کلاسی هست که test مشتق اون کلاسه .
    شما هر متغییری رو به این شکل تو کلاس نمیتونی مقداردهی کنی ، درواقع شما فقط متغییرهای که از یک نوع خاص (کلاس) هستند و دارای تابع سازنده هستند میتونید به این شکل مقداردهی کنید.
    اینجا هم چون name از نوع string هست ، در تعریف درواقع سازنده ش فراخوانی شده ، و من متغییر name رو ندیدم و فک کردم این کلاس از کلاسی به اسم name به ارث برده شده است....

  22. #22
    کاربر دائمی آواتار mahak006
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    کرج
    سن
    32
    پست
    278

    نقل قول: خطا هنگام کامپایل

    نقل قول نوشته شده توسط aidinMC مشاهده تاپیک
    شما هر متغییری رو به این شکل تو کلاس نمیتونی مقداردهی کنی ، درواقع شما فقط متغییرهای که از یک نوع خاص (کلاس) هستند و دارای تابع سازنده هستند میتونید به این شکل مقداردهی کنید.
    اینجا هم چون name از نوع string هست ، در تعریف درواقع سازنده ش فراخوانی شده ، و من متغییر name رو ندیدم و فک کردم این کلاس از کلاسی به اسم name به ارث برده شده است....
    من تو Qt همون طور که گفتم ، متغیر از نوع void* رو هم همین طور دارم مقدار دهی اولیه می کنم . بالا هم نشون دادم .

  23. #23

    نقل قول: خطا هنگام کامپایل

    براحتی میتونید با کد زیر مشکل رو حل کنید:
    تو test.h


    Test(string n = "");

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

  1. سوال: خطا هنگام کامپایل با Release
    نوشته شده توسط barnamenevisjavan در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 23 مرداد 1391, 13:35 عصر
  2. پیغام خطا هنگام کامپایل برنامه
    نوشته شده توسط sd.CSharpProgrammer در بخش برنامه نویسی در محیط QT و هم خانواده هایش
    پاسخ: 4
    آخرین پست: پنج شنبه 03 فروردین 1391, 15:23 عصر
  3. خطا در هنگام کامپایل
    نوشته شده توسط AriAdownloader در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 1
    آخرین پست: پنج شنبه 14 بهمن 1389, 13:14 عصر
  4. خطا هنگام اجرای برنامه کامپایل شده
    نوشته شده توسط mostafa_shaeri_tj در بخش برنامه‌نویسی جاوا
    پاسخ: 1
    آخرین پست: یک شنبه 19 دی 1389, 05:18 صبح
  5. خطا هنگام کامپایل
    نوشته شده توسط Graphical در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 1
    آخرین پست: پنج شنبه 03 بهمن 1387, 15:18 عصر

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

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