تهيئة الأعضاء داخل الفصل باستخدام قائمة مهيئ باستخدام بناء جملة تهيئة موحد?[مكررة]
سؤال
أحاول تجميع ما يلي مع مسفك 2013:
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{false, false, false};
}
المترجم يعطيني الخطأ التالي: SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.
إذا قمت بتغيير الرمز إلى هذا:
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{{false, false, false}};
}
البرنامج يجمع ويعمل بشكل جيد.هل هذه مشكلة مع مترجم, أو لا أفهم بناء الجملة?من ما كنت أقرأ ، يجب أن النسخة الأولى تجميع.
المحلول
هنا هو قواعد مسؤولة من ن 3797:
// after a member declaration:
braced-or-equal-initializer-list:
= initializer-clause
braced-init-list
braced-init-list:
{ initializer-list ,OPT }
{ }
initializer-list:
initializer-clause
initializer-list, initializer-clause
initializer-clause:
assignment-expression
braced-init-list
لذلك أود أن أقول البيان الأول هو الصحيح ومقبولة في الواقع من قبل
مؤخرا gcc
و clang
.
نصائح أخرى
إذا لوضع الفاصلة المنقوطة كما هو مطلوب
class SomeClass
{
struct SomeStruct { bool a,b,c; };
SomeStruct ss{false, false, false};
};
ثم يبدو أنه هو علة من مس فك compiler 2013 مترجم.على الأقل يتم تجميع التعليمات البرمجية بنجاح في www.ideone.com.
ستروكتير سوميستروكت هو مجموع المباراتين وينبغي تهيئة باستخدام قائمة مهيئ.
لا تنتمي إلى StackOverflow