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

نام تاپیک: مشکل با یه کلاس

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    مشکل با یه کلاس

    با سلام برنامه زیر تو اخرین کلاس خطا می ده با اینکه با کلاس های بالاتر دوسته اما نمی تونه از متداش استفاده کنه و خطایUndelare identification میده.دوستان لطفا کمک کنید.

    // LA.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    #include "LA.h"
    #include <iostream>
    #include<conio.h>
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    // The one and only application object
    CWinApp theApp;
    using namespace std;
    class List;
    class ListIterator;
    class ListNode;
    class Graph;
    class Automata;
    ///////////////////////////////////////////////////
    class ListNode
    {
    friend class List;
    friend class ListIterator;
    friend class Graph;
    friend class Automata;
    //-----------------------
    int data1;
    float data2;
    bool action;
    ListNode* link;
    };
    //------------ end class ListNode
    class ListIterator
    {
    friend class Graph;
    ListNode* first;
    public:
    bool NotNull()
    {
    if(first)return true;
    return false;
    }
    ////////////////////////////////// end of NotNull
    bool NextNotNull()
    {
    if(first && first->link)
    return true;
    else
    return false;
    }
    //////////////////////////////////end of NextNotNull
    int Next()
    {
    if(first->link)
    first = first->link;
    else
    return 0;
    }
    ////////////////////////////////// end of Next
    };
    //------------ end class ListIterator
    class List
    {
    friend class ListIterator;
    friend class Graph;
    friend class Automata;
    ListNode* first;
    public:
    List(int element1=0,float element2=0)
    {
    first = new ListNode;
    first->data1 = element1;
    first->data2 = element2;
    first->action = true;
    first->link = NULL;
    }
    ///////////////////////////////////////////////////////end of Constructor
    void InsertFirst(int element1,float element2=0,bool element3=true)
    {
    ListNode* t;
    t = new ListNode;
    t->data1 = element1;
    t->data2 = element2;
    t->action = element3;
    t->link = first;
    first=t;

    }
    ///////////////////////////////////////////////////////end of InsertFirst
    void InsertEnd( int element1,float element2=0,bool element3=true)
    { ListNode* t,* s;
    t = new ListNode;
    if(!first)
    {
    t->data1 = element1;
    t->data2 = element2;
    t->action = element3;
    t->link = NULL;
    }
    else
    { s = first;
    while(s->link != NULL)
    s = s->link;
    t->data1 = element1;
    t->data2 = element2;
    t->action = element3;
    s->link = t;
    t->link = NULL;
    }
    }
    ///////////////////////////////////////////////////////end of InsertEnd
    void deleteNode(int element)
    {
    ListNode* t,* h;
    t = first;
    if(t->data1 == element)
    {
    first = t->link;
    delete t;
    return;
    }
    h=t;
    while(t != NULL)
    {
    if(t->data1 == element)
    {
    h->link = t->link ;
    delete t;
    return;
    }
    h=t;
    t=t->link ;
    }
    cout<<"\n element" <<" "<<element<<" "<<"Not found"<<endl;
    }
    ///////////////////////////////////////////////////////end of deleteNode
    void InactionNode(int element)
    {
    ListNode* t;
    t = first;
    while(t->link != NULL)
    {
    if(t->data1 != element)
    t = t->link;
    else
    t->action = false;
    }
    }
    ///////////////////////////////////////////////////////end of InactionNode
    int Count()
    {
    ListNode *t;
    int count=0;
    for(t=first;t!=NULL;t=t->link)
    {
    count++;

    }
    return count-1;
    }
    ///////////////////////////////////////////////////////end of Count
    void Display()
    {
    ListNode* current;
    current = first;

    while(current != NULL)
    {
    cout<<current->data1<<endl;
    current = current->link;
    }
    }
    ///////////////////////////////////////////////////////end of Display
    void ConcatList(List x)
    {
    ListNode* t;
    if(!first)
    {
    first = x.first;
    return;
    }
    if(x.first)
    {
    for(t = first;t->link;t = t->link);
    t->link = x.first;
    }
    }
    ///////////////////////////////////////////////////////end of ConcatList
    ~List()
    {
    ListNode* t,* h;
    t = first;
    while(t != NULL)
    {
    h = t;
    t = t->link ;
    delete h;
    }
    }
    ///////////////////////////////////////////////////////end of Destrutor
    };
    //------------ end class List
    class Graph
    {
    int num,number,temp,ID,NV;
    friend class Automata;
    List* headNodes;
    public:
    Graph(int v=0)
    {
    headNodes = new List[v+1];
    }
    ///////////////////////////////////////////////////////end of Constructor
    void set(int d)
    {
    NV = d;
    }
    ///////////////////////////////////////////////////////end of set
    void getANDset(int vertex)
    {
    List AllNodes;
    cout<<"Please repeat follow steps for each node"<<endl<<endl;
    for(int i=0;i<vertex;i++)
    {
    cout<<"1. enter vertex ID:";
    cin>>ID;
    AllNodes.InsertEnd(ID);
    cout<<"2. enter number of neghbour vertice:";
    cin>>num;
    for(int j=0;j<num;j++)
    {
    cout<<"enter neghbour vertex"<<" "<<(j+1)<<" "<<":";
    cin>>number;
    temp = number;
    headNodes[ID].InsertFirst(temp);
    }//end for j

    }//end for i
    }
    ///////////////////////////////////////////////////////end of getANDset
    int CountNeighborNodes(int v)
    {
    int count=0;
    ListNode* t;
    t = headNodes[v].first;
    for(t; t->link; t = t->link)
    {
    count++;
    }
    return count;
    }
    ///////////////////////////////////////////////////////end of CountNeighborNodes
    void DisplayNeighbourNodes(int v)
    {
    ListNode* t;
    t = headNodes[v].first;
    cout<<"[";
    for(t; t->link; t=t->link)
    {cout<< t->data1 <<" ";}
    cout<<"]";
    }
    ///////////////////////////////////////////////////////end of DisplayNeighbourNodes
    void Display()
    {
    int i;
    for(i=1;i<=NV;i++)
    {
    cout<<"node "<<i<<" adjacent: ";
    DisplayNeighbourNodes(i);
    cout<<endl;
    }
    }
    ///////////////////////////////////////////////////////end of Display
    ListNode operator = (ListNode* x)
    {
    ListNode* t;
    t->data1 = x->data1;
    t->data2 = x->data2;
    t->action = x->action;
    t->link = x->link ;
    }
    ///////////////////////////////////////////////////////end of operator =
    List operator = (List x)
    { int k =x.Count();// felan
    List t((x.first)->data1,(x.first)->data2);
    ListNode* s;
    s = x.first;
    for(int i=1; i<k; i++)
    {
    s = s->link;
    t.InsertEnd(s->data1,s->data2,s->action);
    }
    return t;
    }
    ///////////////////////////////////////////////////////end of operator =
    ListNode* NeighborNodes(int v)
    {
    ListNode* t;

    t = headNodes[v].first;

    return t ;
    }
    ///////////////////////////////////////////////////////end of NeighborNodes with poniter
    void Display(ListNode* s)
    {
    while(s!=NULL)
    {
    cout<<s->data1;
    s=s->link;
    }
    }
    ///////////////////////////////////////////////////////end of Display with poniter
    List AllNodesList()
    {
    List AllNodes;
    for(int i=1;i<NV;i++)
    {
    AllNodes.InsertEnd(i);
    }
    return AllNodes;
    }
    //////////////////////////////////////////////////////end of AllNodesList
    List NoneNeighborNodes(int v)
    {
    List NNeighbor;
    ListNode* s;
    NNeighbor = AllNodesList();
    s = NeighborNodes(v);
    for(s;s!=NULL;s=s->link)
    {
    NNeighbor.deleteNode(s->data1);
    }
    return NNeighbor;
    }
    ///////////////////////////////////////////////////////end of NoneNeighborNodes
    };
    //------------ end class Graph
    class Automata
    { friend class Graph;
    public:
    Automata(int ID)
    {
    int k;
    ListNode* t;
    List alphaANDp;
    alphaANDp = NoneNeighborNodes(ID);
    }
    ///////////////////////////////////////////////////////end of Constructor
    List operator = (List x)
    {
    List t;
    ListNode* s;
    int k = x.Count();
    s = x.first;
    for(int i=1;i<=k;i++)
    {
    t.InsertEnd(s->data1,s->data2,s->action);
    s = s->link;
    }
    return t;
    }
    //////////////////////////////////////////////////////end of operator =
    void Reward(int ID,float a)
    {
    ListNode* t;
    t = headNodes[ID].first;
    for(t;t->link;t=t->link)
    {
    if(t->data1 == ID)
    t->data2 = t->data2 + a*(1-t->data2);
    else
    t->data2 = t->data2 * (1-a);
    }
    }
    //////////////////////////////////////////////////////end of Reward
    void Penalty(int ID,float b)
    {
    int r;
    ListNode* t;
    r = NoneNeighborNodes(ID).count();
    t = headNodes[ID].first;
    for(t;t->link;t=t->link)
    {
    if(t->data1 == ID)
    t->data2 = t->data2 * (1-b);
    else
    t->data2 = b/(1-r) + t->data2 * (1-b);
    }

    }
    //////////////////////////////////////////////////////end of Penalty
    int GetNextNode(int ID)
    {
    float A=0;
    ListNode* t;
    t = headNodes[ID].first;
    while(t!=NULL)
    {
    if((t->data2) >= A && t->action == true)
    {
    A = t->data2;
    ID = t->data1;
    }
    }
    return ID;
    }
    };
    //////////////////////////////////////////////////////////////////////////end of definition classes
    int main()
    {
    getch();
    return 0;
    }

    آخرین ویرایش به وسیله root88 : شنبه 07 فروردین 1389 در 19:31 عصر

  2. #2

    نقل قول: مشکل با یه کلاس

    لطفا دقت کنید که سوالات کنسولی C++‎‎‎ با هر کامپایلری که انجام می شود باید در بخش عمومی برنامه نویسی با C/C++‎‎‎ مطرح شود، زیرا همه کامپایلرهای جدید تحت کنسول تقریبا به یک شکل عمل می کنند و تغییرات مشابه هست.

    این بخش تنها برای برنامه نویسی پشرفته MFC یا Win32 توسط ++visual C هست.
    به همین خاطر تاپیک ها شما منتقل می شوند...

    اما در مورد سوال شما:

    ابتدا کدهای زیر را حذف کنید:

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    // The one and only application object
    CWinApp theApp;
    سپس دقت کنید که شما نمی توانید به این شکل که نوشته شده کلاسی را friend کلاس دیگر معرفی کنید و از تمامی امکانات آن به این شکل استفاده کنید، یا انواع جدید از متغیرها آن بسازید. مثلا در حالت friend متدی از کلاس فراخوانی می شود که static باشد. همین طور برای متغیر ها.

    در صورت نیاز شما باید کلاس ها را مشتق یک دیگر تعریف کنید و متغیر یا متد مورد نظر را در کلاس پایه عمومی تعریف کنید، هر چند که عمومی تعریف کردن برای متغیر توصیه نمی شود.
    توصیه می شود یک تابع عمومی در کلاس پایه بنویسید که یک نمونه از متغیر تعریف کند و سپس با New حافطه اختصاص دهد. پس friend به این شکل توصیه نمی شود.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    از پاسختون ممنون!اما من سوالم در کدوم قسمت مطرح کنم اگه منظور شما بخش برنامه نویسی با ++C /C است که اونجا هم پست من حذف شد

  4. #4

    نقل قول: مشکل با یه کلاس

    نقل قول نوشته شده توسط root88 مشاهده تاپیک
    از پاسختون ممنون!اما من سوالم در کدوم قسمت مطرح کنم اگه منظور شما بخش برنامه نویسی با ++C /C است که اونجا هم پست من حذف شد
    احتمالا ایشون به خاطر عنوان سوال فکر کردند سوال برای بخش دیگری هست، اگر سوال شما به همین شکل در زمینه برنامه نویسی ++C/C هست در همانجا مطرح کنید (با عنوان مناسب)

    اگر هم درخواست الگوریتم یا تئوری حل مسئله هست در بخش ساختمان داده و الگوریتم.

    در هر صورت اگر اشتباها حذف شد پیام بفرستید برایتان بررسی می کنم و در صورت نیاز بازیابی می کنم.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    بازم ممنون!و ببخشید که اینجا دوباره سوالم رو می پرسم اما صرف نظر از نامناسب بودن تعریف این برنامه به نظر شما علت این خطا چیه؟
    heanNodes undeclared undentifier
    مثلا اونجایی که با رنگ قرمز مشخص شده؟

  6. #6

    نقل قول: مشکل با یه کلاس

    خدمت شما توضیح دادم، کلا شما اصل برنامه نویسی شئی گرایی را رعایت نکردید.
    کاری که شما می خواهید انجام دهید باید توسط کلاس های پایه و مشتق شده انجام می شد، اما شما کلاس دیگر را دوست کلاس دیگر تعریف کردید.

    شما تا زمانی که یک نسخه از کلاس دیگر تعریف نکنید نمی توانید از متغیرها و توابع آن استفاده کنید، شما با کلمه کلیدی friend فقط یک دوست تعریف کرده اید، و بدون تعریف یک نمونه از آن، فقط به اعضای static کلاس دوست دسترسی دارید.

  7. #7
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    دوست عزیز من کلاس رو به صورت زیر تغییر دادم اما با اینکه کلاس لیست از نوع عمومی هست تو تابع Inaction نمی تونه به اعضای حفاظت شده دسترسی پیدا کنه و همین اول کار خطا می ده .ببخشید که سوالاتم اینجورین من زیادی مبتدیم!

    class ListNode
    {
    protected:
    int data1;
    float data2;
    bool action;
    ListNode* link;
    public:
    ListNode(int &a,float &b,bool &c,ListNode*p=NULL):data1(a),data2(b),action(c),li nk(p){}
    void set(int a,float b,bool c)
    {
    data1=a;
    data2=b;
    action=c;
    }
    };
    class List : public ListNode
    {
    protected:
    ListNode* first;
    ListNode* newNode(int &a,float &b,bool &c,ListNode*p)
    {
    ListNode* q=new ListNode(a,b,c,p);
    return q;
    }
    public:
    int Inaction(int element)
    {
    ListNode* t=first;
    while(t->link != NULL)
    {
    if(t->data1 == element)
    t->action = false;
    return 1;
    else
    t = t->link;
    }
    }
    };

  8. #8

    نقل قول: مشکل با یه کلاس

    شما باید بحث کار با کلاس ها را دقیق چند مرتبه مطالعه تا موضوع کلاس مشتق و پایه و غیره کامل برای شما روشن شود، البته این اشکالات در ابتدا همیشه وجود دارد و مختص شما نیست، با تمرین بعد از مدتی خیلی راحت متوجه تمامی این اشکالات خواهید شد.

    چند اشکال:

    - شما کلاس List را از کلاس ListNode مشتق کرده اید، اما سازنده ای تعریف نکردید که متغیرهای عضو کلاس پایه ها را پر کند.

    - شما کلاس List را از کلاس ListNode مشتق کرده اید اما از امکانات ان به درستی استفاده نکرده اید. مثلا شما ListNode*first و ListNode*t را در کلاس List تعریف کرده اید، اما این دو تعریف هیچ ارتباطی به کلاس مشتق شده دارد. یعنی شما حتی اگر کلاس را مشتق اعلام نکرده بودید باز هم می توانستید چنین تعرفی کنید، چون شما فقط در حال تعریف یک نمونه از کلاس ListNode هستید که به داده های مشتق شده دسترسی ندارید.

    اگر قرار هست که شما یک شئی تعریف کنید که امکانات کلاس پایه را در برداشته باشد و به داده های protected هم دسترسی داشته باشید باید به این شکل تعریف کنید، یعنی از کلاس مشتق شده:

    List* first;
    //..
    List* t = first;

  9. #9
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    آقا دستت درد نکنه!من سازنده تعریف کرده بودم اما چون کدم رو یه سیستم دیگه است و اون به اینترنت دسترسی نداره مجبورم رو این سیستم دوباره کد بنویسم برای همین کوتاهش کردم!یه سوال دیگه می دونم که با این سوالا دردسر شدم .اگه بخوام به تعدادی که کاربر می خواد من از یه کلاس شی ایجاد کنم چطور باید اینکار رو انجام بدم؟

  10. #10

    نقل قول: مشکل با یه کلاس

    برای تعداد می توانید عدد را از ورودی دریافت کنید و در یک لیستی از اشاره گر به کلاس توسط New ذخیره کنید. یعنی وقتی از new استفاده می کنید با پرانتز تعداد را مشخص کنید.

    در صورت نیاز می توانید از vector و list در C++‎ استفاده کنید که همان لیست پیوندی هستند (در STL کتابخانه استاندارد C++‎ هستند)

  11. #11
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    دوست عزیز برای ایجاد اشیا به تعدادی که کاربر می خواد من کد زیر رو نوشتم.(نمی دونم با لیست چطور میشه نوشت )البته امتحانش نکردم چون برنامهم هنوز صدتا خطا داره.سوالم اینه که اگر در طی اجرا بخواهیم تعدادی از اشیا این ارایه رو حذف و تو یه ارایه دیگه ذخیره کنیم جطور میشه اینکار رو انجام داد.
    int num;
    A* LA[num];
    ID=1;

    {
    LA[ID]= new A(ID);
    ID++;
    }
    while(ID!=num)
    تو یه سایت نوشته بود

    delete myarray[elemen];

    با توجه به اینکه ارایه ای از اشاره گرهاست میشه از این برای حذف استفاده کرد؟
    آخرین ویرایش به وسیله root88 : پنج شنبه 12 فروردین 1389 در 16:05 عصر

  12. #12

    نقل قول: مشکل با یه کلاس

    در زبان C++‎‎ شما اجازه ندارید ورودی آرایه ها را متغیر قرار دهید، باید عدد ثابت باشد.

    اگر قرار هست تعداد از ورودی دریافت شود، هامنظور که گفتم باید به جای همان آرایه اول هم از new استفاده کنید. یعنی به جای []A*LA شما باید A**LA تعریف کنید (اشاره گر به اشاره گر)، سپس قیل از آن حلقه while که تعریف کردید، باید یک new دیگر به اندازه طول num تعریف کنید.


    کلا بگذارید یک توصیه به شما کنم، تا زمانی که امکانات وسیع STL و توابع استاندارد ++C هست خود را زیادی درگیر کار با اشاره گر ها نکنید. از List/vector استفاده کنید و راحت فقط به همان نمونه شئی از کلاس فقط با new حافظه تخصیص دهید. از آرایه هم استفاده نکنید، vector با تابع resize به شما اجازه می دهد طول لیست را تغییر دهید. ضمنا لزومی ندارد که کلا ابتدا طول را مشخص کنید. با vector راحت می توانید از تابع push_back استفاده کنید و یک عنصر جدید به لیست اضافه کنید، نیاز به این هم ندارد که بدانید چند تا قرار هست در آینده اضافه کنید، خودش حافظه عنصر را تخصیص می دهد، فقط شما چون قرار هست اشاره گر به کلاس را اضافه کنید، فقط در هر مرحله یک new برای کلاس باید فراخوانی کنید.

    ضمنا هر وقت کار با لیست تمام شد، با delete در یک حلقه تک تک عناصر را از لیست فراخوانی کنید و حافظه هر کدام را بگیرید.

    مثال:

    using namespace std;

    int num;
    // get num here from user....

    vector<myClass*> mylist;

    mylist.resize(num);


    -------------
    // now add or allocate each one:

    myClass *obj1 = new myClass();

    mylist.insert( 0, obj1 ); // position 0 add obj1
    //Or:
    mylist.push_back( obj1 ); // add it to the end of list

    پس گرفتن حافظه :

    int i;

    for ( i = 0; i != mylist.size( ); i++ )
    delete mylist[i];

  13. #13
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    سلام
    آخ ببخشید که من هر خط برنامه ام یه خطا می ده آخه من هرچی برنامه تا حالا نوشتم دستی بوده:
    کلاس پایه من ListNode که گره تعریف می کنه .تو کلاس مشتق List متدInsert ش کار می کنه اما وقتی می خوام داده های یه لیست را نمایش بدم یا تعدادشونو بشمرم خطا می ده اینم کدشه:

    int Count()
    {
    List *t;
    t=first
    int count=0;
    for(t;t!=NULL;t=t->link)
    {
    count++;

    }
    return count-1;
    }

    که نمی تونه از اشاره گر نوعListNode رو به List تبدیل کنه

  14. #14

    نقل قول: مشکل با یه کلاس

    شما همیشه پیام خطای کامپایلر را قرار دهید تا بتوانم پاسخی داشته باشم.
    چون این طوری هم نمی دانم اصلا کد شما چه هست، هم نمی دانم کجا و کدام خط خطا دارد.

  15. #15
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    بله چشم،
    '=':cannot convert from ListNode* to List*
    کلاس لیست از کلاس لیست نود مشتق شده و در قسمت محافظت شده کد List* first نوشتم. از for خطا میگیره مربوط به t->link هستش .t رو چه از نوع لیست تعریف کنم چه لیست نود خطا می ده.
    آخرین ویرایش به وسیله root88 : جمعه 13 فروردین 1389 در 22:40 عصر

  16. #16
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174
    دوست عزیز کجایی؟

    آقا یکی به دادم برسه.
    آخرین ویرایش به وسیله Nima_NF : سه شنبه 17 فروردین 1389 در 00:02 صبح

  17. #17

    نقل قول: مشکل با یه کلاس

    همین موضوع را در پست شماره #8 برایتان توضیح دادم.
    شما اجازه ندارید خارج از کلاس به اعضای protected/private کلاس پایه دسترسی پیدا کنید. شما فقط داخل کلاس مشتق شده این اجازه را دارید.

    اگر کلاس list مشتق شده هست، باید در آن تابع بنویسید که داده protected/private را به شما بدهد، یعنی وقتی شما داخل کلاس List یک t از نوع list تعریف می کنید، دیگر به اعضای protected دسترسی ندارد، فقط اگر مستقیم متغیر را فراخوانی کنید عمل شما درست هست.

    پس تابع تعریف کنید، به این شکل:

    // myNum is protected

    int get_name() const
    {
    return myNum;
    }

    void get_name(int inNum)
    {
    myNum = inNum;
    }
    پس اگر قرار هست به link دسترسی پیدا کنید، باید با تابع این کار را انجام دهید.

  18. #18
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    جناب Nima-NF ،ارگومان اول متد insert مربوط به پست 12 می تونه یه متغیر باشه ؟بعلاوه اگه بخوام nتو یه حلقه تا شی با شناسه متفاوت ایجاد کنم چیکار باید بکنم ؟
    آخرین ویرایش به وسیله root88 : سه شنبه 17 فروردین 1389 در 19:40 عصر

  19. #19

    نقل قول: مشکل با یه کلاس

    پارامتر اول Insert از نوع iterator هست، می تواند متغیر صحیح نیز باشد.
    برای تعریف متغیر با نام متفاوت به شکل نا محدود روشی نیست، برای تعداد نامحدود همین شماره آن در لیست ها هست. البته روش هایی هم هست که به جای همین شماره ها، یک نام رشته ای برای هر کدام انتخاب کنید. MSDN را بررسی کنید.

  20. #20
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    دوست عزیز من هنوز با کلاس پایه و مشتق مشکل دارم ممکنه شما یه کتاب آموزشی(دیتل رو دارم اما یکی دوتا کلاسه که خوندمش )یا چند تا مثال کلاس به من معرفی کنید

  21. #21

    نقل قول: مشکل با یه کلاس

    کتاب دیتل را که دارید، کتاب C++‎ جعفرنژاد نیز برای مثال های بیشتر مفید هست.
    ضمنا در بخش فنی C، تاپیکی هست که هر کسی کتاب مختلفی را ذکر کرده، می توانید بررسی کنید.

  22. #22
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    دوباره سلام،
    دوست عزیز،من مشابه تعریف شما که تو پشت های قبل بود یه لیست از کلاس vector ساختم که اشاره گرهایی به نوع کلاسه ،اما نمی دونم چطوری می تونم برای اشیایی که از این کلاس ساخته شدن و با vector به اونها اشاره کردم متدهایی کلاس رو صدا بزنم از . و <- هم استفاده کردم اما نشد
    مثلا من می خوام شیی با شناسه 1 متد selectrand رو صدا بزنه
    vector<L*> list;
    list.resize(n);
    for(int i=0;i<n;i++)
    {
    L* l=new L(& graph,i);
    list.push_back(l);
    }
    cout<<list[1]->selectrand(1);

  23. #23

    نقل قول: مشکل با یه کلاس

    خیلی از مشکلات این طوری شما توسط debugger به راحتی قابل یافتن و حل کردن هست.

    بر روی خط اول برنامه در vector در editor ویژوال استادیو راست کلیک کنید و "run to curser" را انتخاب کنید. برنامه کامپایل شده و در این خط متوقف می شود، سپس می توانید با کلید F10 به خط بعدی بروید. در همین حال که داخل حلقه for می چرخید در پنجره Autos (کنار پنجره های locals , watch و غیره) می توانید متغیر ها و کلاس ها را مشاهده کنید. می بینید که vector شما در داخل حلقه در هر مرحله 1 خانه به طولش اضافه می شود و از 2 به 4 خانه می شود.

    مشاهده می کنید که اشکال کار شما در اینجا هست که با resize به تعداد n اشاره گر برای vector می سازید و سپس بعد از آن در for باز هم n اشاره گر دیگر به انتهای Vector اضافه می کنید.
    قبلا هم به شما گفتم، متد push_back خودش یک خانه به vector اضافه می کند، یعنی همان حلقه for کافی هست. پس خطی که از resize استفاده کردید را حذف کنید.

    زمانی از resize استفاده می کنید که فرضا می خواهیم n خانه رزرو کنیم.
    سپس باید از insert استفاده کنید که مثلا بگویید در خانه 0 مقدار x را قرار بده و الی آخر.

    در هر صورت برنامه شما با حذف کردن خط resize مشکلش بر طرف می شود.

  24. #24
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    با سلام،
    دوست عزیز من یه تابع دارم که تعداد گره های یه لیست رو می شمره ،

    int
    Count()
    {
    ListNode *t=NULL;
    int count=0;
    for(t=first;t!=NULL;t=t->link)
    count++;
    return count;
    }
    می خوام از خروجی این تابع استفاده کنم و فیلد دوم هر گره از لیستم رو با یک تقسیم بر این خروجی مقدار دهی کنم اما مقداری که در این قرار میده مثلا به این صورته 1.#NF هست به جای عدد؟
    t=x->first;
    k=x->Count();
    for(t;t!=NULL;t=t->link)
    {
    t->data2=1/k;

    }

  25. #25
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    اینم یه مشکل دیگه لطفا راهنمایی بفرمایید.
    میخوام یکی از اشیایی که تو لیستی از vector دارم یکی از متدهاشو صدا برنه با دستور زیر

    nextNode=mylist[currentNode]->selectNextNode(currentNode);
    و مقدار برگشتی شو بریزم تو یه متغیر .این شی متد زیر روصدا می زنه و چون flag صفر هستش تابع
    selectRandomAction(ID)
    صدا میزنه


    int
    selectNextNode(int ID)
    {
    int NN;
    if(flag==0)
    {
    NN=selectRandomAction(ID);
    flag=1;
    return NN;
    }
    else
    NN=selectBestAction(ID);
    return NN;
    }

    و یعد در تابع فراخوانی شده تابع Genrandomصدا زده میشه که اینم کدشه اما همش سر تابعGenrandom برنامهbreak میشه نمی دونم شاید مقدار رو نمی تونه بهش پاس بده؟؟

    int
    GenRandom(int lenght)
    {
    int Rand;
    srand(time(0));
    Rand= rand()%lenght;
    return Rand;
    }

  26. #26

    نقل قول: مشکل با یه کلاس

    نمی توانم نظر خاصی بدهم، فقط دقت کنید که lenght هرگز 0 نباشد در غیر این صورت تقسیم بر صفر خطا می دهد.

  27. #27
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    وقتی رو متغیر نگه می دارم دقیقاً مقدار صفر رو نمایش می ده

  28. #28

    نقل قول: مشکل با یه کلاس

    شما کد همان قسمت را قرار ندادید، پس معلوم نیست که lenght شما از کجا می آید و مقدار آن چقدر هست، ضمنا همیشه قبل از تقسیم باید با شرط (if) مقدار هایی که جواب را نامشخص می کند را حذف کنید، مثلا هیچ وقت نباید عددی را بر صفر تقسیم کنید.

    پاورقی: ضمنا درست آن length هست : )

  29. #29
    کاربر دائمی
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    کرمانشاه
    پست
    174

    نقل قول: مشکل با یه کلاس

    با سلام من یک سوال دیگه از شما داشتم،ببخشید که اینجا مطرح کردم


    باید توی حلقهdo while یه عدد تصادفی تولید کنم و یه شرط رو در انتها چک کنم،برنامه این کار رو انجام میده اما اگر شرط برقرار نباشه و به اول حلقه برگرده دوباره همون عدد قبلی رو که تصادفی تولید کرده بود ایجاد میکنه در حالی که باید بتونه عدد دیگه ای رو تولید کنه.به نظر شما مشکلش کجاست؟


    do
    {
    int p=GenRandom(c);
    .
    .
    .
    .

    }while(......);

    آخرین ویرایش به وسیله root88 : چهارشنبه 08 اردیبهشت 1389 در 15:28 عصر

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

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