سؤال

لدي مشكلة في تحديد حجم صفيف بلدي. في الكود الخاص بي:

class Test {
    public:
       ....//Functions
    private:
      string name[];
};

Test() {
   //heres where i want to declare the size of the array
}

هل هذا ممكن؟

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

المحلول

لا. لكن يمكنك استخدام متجه من السلاسل بدلاً من ذلك:

private:
  std::vector<std::string> name;

ثم في مُنشرك:

Test()
    : name(sizeOfTheArray)
{
}

سيكون المتجه حجمًا لعدد الأوتار التي تحددها. هذا يعني أنه سيتم تخصيص جميع ذاكرة الأوتار في وقت واحد. يمكنك تغيير حجم الصفيف كما يحلو لك ، ولكن لا يوجد شيء يقول أنه يجب عليك. وبالتالي ، تحصل على جميع فوائد استخدام صفيف مخصص ديناميكيًا ، ثم بعضها ، بدون عيوب.

نصائح أخرى

ستحتاج إلى تخصيص الذاكرة ديناميكيًا للمصفوفة باستخدام new.

أعلن أن المتغير مثل هذا:

private:
    string* name;

وفي مُنشرك ، افعل هذا:

int size = ...
name = new string[size];

وتحرير الذاكرة في المدمرة مثل هذا:

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