مشکل در استفاده از وکتور در کلاس به صورت private - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در استفاده از وکتور در کلاس به صورت private

+2 امتیاز

سلام

مشکل این کلاس چیه؟

class C_ostanha{
private:
int row=6, column=5;
vector < vector <string> > ostan(row, vector <string> (column));
public:
    void setOstan();
};

Error is:"row" is not a type

سوال شده اردیبهشت 11, 1393  بوسیله ی moh3en (امتیاز 209)   15 28 40
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade
row is not a type
باید نوع row رو مشخص کنین
یعنی چی؟ row از نوع int هست که  دیگه نوع چی باید مشخص کنم؟

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

این کدی که نوشتید  کلا اشتباهه حتی اگر به جای row از decltype استفاده کنین

به محض این که الان بخواین از این وکتور استفاده کنین ارور میده !

class C_ostanha{
private:
int row=6, column=5;
vector < vector <string> > ostan(int, vector <string> (column));
public:
    void setOstan()
    {
        cout<<ostan.size();
    }

};

یعنی بدون استفاده کردن مشکلی نداره دلیلشم اینه که template , تا وقتی که لازم نباشه شی ازش ساخته نمیشه ! ولی به محض ساختن شی ارور میده چون constructor ای که استفاده کردین رو نمیشناسه ! (ما constructor که type ,value بگیره نداریم اصلا )

 

اگر کد بالا رو برای این نوشتید که وکتورتون بر اساس row و col ریسایز بشه

کد درسته ولی به شرط این که وکتور به عنوان عضو کلاس تعریف نشده باشه و خارج از کلاس باشین  !

یعنی

int main()
{
    int row=5,col=6;
    vector < vector <string> > ostan(row, vector <string> (col) );
}

کد بالا 5 تا وکتور که با سایز 6 هستن رو میزاره داخل ostan

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

class C_ostanha{
private:
    int row, column;
    vector < vector <string> > ostan;
public:
    void setOstan()
    {
          cout<<ostan.size();
    }

    C_ostanha():
        row(6),
        column(3),
        ostan(row,vector<string>(column))
    {}

};

 

پاسخ داده شده اردیبهشت 11, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اردیبهشت 11, 1393 بوسیله ی moh3en
+2 امتیاز

سلام .

تو پارامتر اولی ازت یک type میخواد . نه خود متغیر رو !

این بسته به خودته که چه type ی رو بهش بدی . ولی میتونی type خود متغییر row رو بهش بدی با decltype .

به اینصورت :

class C_ostanha{
private:
int row=6, column=5;
vector < vector <string> > ostan(decltype(row), vector <string> (column));
public:
    void setOstan();
};

 

پاسخ داده شده اردیبهشت 11, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
...