استفاده از {} برای مقدار دادن به struct - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از {} برای مقدار دادن به struct

+5 امتیاز

از کد زیر برای مقدار دادن به struct استفاده می کنم

struct MyStruct
{
	int a;
	int b;
	int c;
};

int main()
{
	MyStruct a={ 1, 2, 3 };
}

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

struct MyStruct
{
	MyStruct(){}
	int a;
	int b;
	int c;
};

int main()
{
	MyStruct a={ 1, 2, 3 };
}

راهی داره که بشه زمانی که سازنده هم داریم به این شکل مقدار بدیم ؟

سوال شده مرداد 20, 1393  بوسیله ی Mad (امتیاز 245)   10 35 47
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade
در ++C که نه. می‌تونید با اضافه کردن constructor چیز مشابهی بسازید.

1 پاسخ

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

بخاطر این که {1,2,3} مقدار از نوع initializer_list بر می گردونه  . 

اگر کلاس  سازنده نداشته باشه اعضا بر اساس list  بصورت خودکار مقدار می گیرن که بهش aggregate initialization هم گفته میشه .

برای این که اون کد کار کنه باید سازنده که 3 تا مقدار int می گیره رو هم اضافه کنین .

struct MyStruct
{
	MyStruct(){}
	MyStruct(int x, int y, int z) :
		a(x),b(y),c(z){}
	int a;
	int b;
	int c;
};

int main()
{
	MyStruct a={ 1, 2, 3 };
}

 

پاسخ داده شده مرداد 20, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد مهر 16, 1393 بوسیله ی Mad
سلام جالبه... ولی اون ۳ خط اول struct یه مقدار برام عجیب و غریب هست...!
چرا عجیب ؟
قطعا از اطلاعات کم من هست...!
ولی نه ; هست! نه a و b و c تابعن! نه برام معلومه اصلا چی می گه...!
باید مطالعه کنم در مورد این قسمت...
البته اگه خواستید یه توضیح کوچولو کنارش بدید... اگرم نه بازم ممنون جواب خوبی بود...
a, b,c سه تا متغیر عضو کلاس هستن .
 اون روش که جلوی سازنده از : استفاده می کنن  برای مقدار دادن به اعضای کلاس یا struct هستش که بهش initializer_list میگن توی این لینک اطلاعات کاملی درموردش هست
http://en.cppreference.com/w/cpp/language/initializer_list
یکسری مزایا هم داره که این جا هست
http://goo.gl/gcWdop
...