私有变量依赖于未指定的私有变量(C++)

Private variable depending on unspecified private variable (C++)

假设我有一个像这样的class:

class SpinSystem{
private:
  int L;
  int L2;
  const int k=1, J=1;
  const int teq, tcorr;
  const double TC=2/log(1+sqrt(2.0));//TC=2.269;
  double Temp;
  int Nmuestras;
  int s[L][L]; int E,M; 
  int Cluster[L2][2]; int write;
public:
  void set_values(int, double, int);
};

void SpinSystem::set_values(int length, double temperature, int nsamples){
  L = length;
  Temp = temperature;
  Nmuestras = nsamples;
  L2 = length*length;
  teq = (int)(10*pow(length/8.0,0.58));
  tcorr = (int)(1*pow(length/8.0,0.58));
}

私有变量L2、teq、tcorr取决于L的值。这就是为什么我用set_values方法设置它们的值。但是,我必须定义一些数组,例如 s[L][L] 和 Cluster[L2][2],它们的大小显然取决于 L。我该如何实现呢?提前致谢。

您应该在构造函数中处理所有这些; init 函数有各种相关的问题。并且您应该确保变量按依赖顺序列出(即,如果一个变量依赖于另一个变量,则后者必须首先声明)。此外,固定常量可以简单地设为静态,因为它们始终相同。您不需要保留从其他变量(如 L2)中简单派生的变量。尽可能内联初始化。

class SpinSystem{
private:
  static constexpr int k=1;
  static constexpr int J=1;
  static constexpr double TC=2/log(1+sqrt(2.0));//TC=2.269;

  int teq = (int)(10*pow(length/8.0,0.58));
  int tcorr = (int)(1*pow(length/8.0,0.58));

  int L;
  double Temp;
  int Nmuestras;

  std::vector<int> s;
  int E;
  int M;
  std::vector<int> Cluster;
  int write;
public:
  void SpinSystem(int length, double temp, int nsamples)
    : L(length)
    , Temp(temp)
    , NMmuestras(nsamples)
  {
    s.resize(L*L);
    Cluster.resize(L*L*2);
  }
};

这里我创建了总大小相同的一维数组。我强烈建议您只这样做,并根据需要使用一个简单的函数来转换索引。但是,如果您不喜欢那样,您可以随时使用嵌套向量。

确保在您的实际代码中初始化 E、M 和 Write...最好是内联或在初始化列表中。

根据您的代码,您需要分配一个动态二维数组。 这实际上是一个指向数组的指针数组。

int _tmain(int argc, _TCHAR* argv[])
{
    int L = 10; // get from command line

    int ** s = new int*[L];
    for (int i = 0; i < L; i++)
        s[i] = new int[L];

    // DO SOMETHING

    // free memory
    for (int i = 0; i < L; i++)
        delete[] s[i];

    delete[] s;

    return 0;
};