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

مشکل در استفاده از push_back

0 امتیاز

مشکل این کد چیه ؟ من وقتی از add استفاده می کنم برنامه ارور میده

enum Colour {empty = 0, red, yellow};

class Game{
public:
   void add(size_t, Colour const&);

private:
   vector<std::vector<Colour>> tab;
};

void Game:: add(size_t column, Colour const& colour) {
tab[0][column].push_back(colour);
}
سوال شده فروردین 18, 1393  بوسیله ی مزدا (امتیاز 32)   2 5 6

2 پاسخ

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

 مشکل از ()add هست . اگر ذره ذره بررسی کنیدش متوجه میشید .
tab  یک vector هست که هر عضوش از نوع <vector<Colour . و هر عضو  <vector<Colour از نوع Colour است .

[0] tab یک ارجاع به اولین عنصر خودش که یک <vector<Colour هست رو برمیگردونه .
پس شما حالا یک &<vector<Colour دارید و شما با [column] به عنصری که نسبت به مقدار column هست دسترسی پیدا میکند . یعنی یک &Colour به شما برمیگردونه .

پس شما تا اینجا (یعنی [tab[0][column ) یک &Colour دارید و بعدش جلوی یک شی &Colour نوشتید ;(push_back(colour. .

برای همین برنامه به مشکل میخوره چون از یک شی &Colour یک enum هست متد یک شی std::vector رو فراخوانی کردید .

 

اینا توضیح بود که دلیلش رو بدونید . ( خودمم یکم بیکار بودم smiley )

کدتون رو اینجوری تغییر بدید :

void Game:: add(size_t column, Colour const& colour) {
	tab[column].push_back(colour);
}

یا اینطوری :

void Game:: add(size_t column, Colour const& colour) {
	vector<vector<Colour>>::iterator it = tab.begin();
	it[column].push_back(colour);
}
پاسخ داده شده فروردین 18, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد فروردین 18, 1393 بوسیله ی BlueBlade
+1 امتیاز

مشکل اصلی کد بالا اینه که  tab اندازش توی کد بالا صفر هستش و tab[0 ارور میده .

شما باید قبل از استفاده از [] یک وکتور به tab اضافه کنین

tab.push_back(std::vector<Colour>);

 

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