为什么我不能在C ++中初始化非最终实例变量或生成可变大小的数组?

时间:2013-10-14 07:57:28

标签: c++ arrays oop for-loop

我几乎不了解C ++以及如何使用数组。话虽这么说,我要做的是为化学元素创建一个简单的类,它自动决定基于其原子序数分配给该元素的shell数。这是我的示例代码:

class Element {
   int n, i;
   int s = 1; 

   for (int i = 2; i < n; i += 8) {s += 1;}  

   int shell[s + 1];

   public: Element(int n) {this.n = n;}
};

这段代码应该创建一个名为int shell[s + 1]的数组,其中包含s-1 shell。我把它变成了s-1而不是s所以我不会经常把shell#1称为shell [0]等等来迷惑自己。因此,shell [0]未使用。或者我可以反过来实际使用shell [0],但那是无关紧要的。如您所见,int s自动设置为1,因为所有元素都包含至少一个shell。然后有一个for循环,根据int n添加shell。最后,我声明了数组int shell[s + 1]

最终,我遇到了很多错误。其中大多数是无意义的语法错误,但显然在C ++中你不允许初始化非最终实例变量。这对我来说没有多大意义,因为我真的需要int s从1开始for for循环。它还告诉我,我也不能制作可变大小的数组。怎么办?

1 个答案:

答案 0 :(得分:0)

您可以使用std::vector<int>并在构造函数中初始化它:

class Element {
   int s, n;
   std::vector<int> shell;

   public: Element(int n) : s(1), n(n) {
       for (int i = 2; i < n; i += 8) {s += 1;}  
       shell.resize(s + 1);
   }
};