تهيئة الأعضاء داخل الفصل باستخدام قائمة مهيئ باستخدام بناء جملة تهيئة موحد?[مكررة]

StackOverflow https://stackoverflow.com//questions/24035388

سؤال

أحاول تجميع ما يلي مع مسفك 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.

ستروكتير سوميستروكت هو مجموع المباراتين وينبغي تهيئة باستخدام قائمة مهيئ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top