سؤال

لدي فئة وأريد أن أحصل على أقنعة بت مع القيم 0،1،3،7،15، ...

من الأساس للغاية أريد أن أعلن مجموعة من كثرة الثابت مثل:

class A{

const int masks[] = {0,1,3,5,7,....}

}

لكن المترجم سوف يشكو دائما.

حاولت:

static const int masks[] = {0,1...}

static const int masks[9]; // then initializing inside the constructor

أي فكرة عن كيف يمكن القيام بذلك؟

شكرا!

هل كانت مفيدة؟

المحلول

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, ... };

قد ترغب في تثبيت الصفيف داخل تعريف الفصل بالفعل، لكنك لا تضطر إلى ذلك. سيكون لدى الصفيف نوعا كاملا عند نقطة التعريف (وهو الاحتفاظ في ملف .cpp، وليس في الرأس) حيث يمكن أن نستنتج الحجم من المهجع.

نصائح أخرى

// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
enum Masks {A=0,B=1,c=3,d=5,e=7};
  1. يمكنك تهيئة المتغيرات فقط في المنشئ أو الطرق الأخرى.
  2. يجب تهيئة المتغيرات "الثابتة" من تعريف الفصل.

يمكنك ان تفعلها:

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, .... };

حسنا، هذا لأنه لا يمكنك تهيئة عضو خاص دون استدعاء طريقة. أنا دائما استخدام قوائم تهيئة الأعضاء للقيام بذلك ل FONS وأعضاء البيانات الثابتة.

إذا كنت لا تعرف ماذا قوائم التهيئة الأعضاء هم، هم فقط ما تريد.

انظر إلى هذا الرمز:

    class foo
{
int const b[2];
int a;

foo():    b{2,3}, a(5) //initializes Data Member
{
//Other Code
}

}

أيضا دول مجلس التعاون الخليجي لديه هذا التمديد بارد:

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top