在类中定义变量

时间:2015-10-23 03:22:43

标签: c++ class

我正在制作一个多项式程序,下面是我为它编写的代码。

class Polynomial{
private:

int n;  //n = degree of polynomial
double a[n];            //a = array of coefficients where a[i] is the coefficient of x^i
double roots[n];
double maxima[n-1],minima[n-1],inflection[n-1]; //arrays of coordinates of maxima, minima and points of inflection

这只是头文件中类Polynomial的一部分。当我尝试编译时,它给了我以下错误

invalid use of non-static data member  int n;

当我使n静态时,它会给我以下错误

 array bound is not an integer constant before ‘]’ token

这是在单独编译头文件时。我究竟做错了什么?

4 个答案:

答案 0 :(得分:1)

您的类包含VLA(变量长度数组),而不是 在C ++中受支持。

您需要通过使n保持不变来确定大小 或者使用另一种动态的容器,std :: vector 是一个类似于数组的容器,但它是动态的,即可以 在运行时扩展。

class Polynomial
{
  static const int n = 10;
  double a[n];
  ...

class Polynomial
{
  std::vector<double> a;

答案 1 :(得分:0)

您可以使用new在构造函数中简单地分配所有这些内容。 使用矢量。

class Polynomial
{
    vector<double> a;
    Polynomial()
    {
        a.assign(n,0);
        ...
    }
..
};

答案 2 :(得分:0)

必须在编译时知道C样式数组的大小。

如果n实际上在编译时已知,则可以将其设为模板参数而不是成员变量。

如果没有,那么您将不得不使用其他容器,例如vector<double> a, roots, maxima, minima, inflection;

答案 3 :(得分:0)

没有陷入并发症,

简单的答案是,要使静态内存分配起作用(这是您尝试使用double a[n];),您需要在编译时知道数组的大小。

但是,如果你甚至在程序运行之前就不知道数组的大小,而是希望在程序运行期间的某个地方知道它,那么你需要使用动态内存分配

要做到这一点,你必须

  • 声明指针而不是静态数组。

  • 使用new指令
  • 分配内存

然后再

  • 当您不需要它们时,例如当类的范围结束时,您必须使用带有delete括号的[]指令释放您分配的内存以指示编译器为多个连续变量释放内存。

做类似的事情:

class Polynomial{
private:
int n; //n = degree of polynomial
double *a; //a = array of coefficients where a[i] is the coefficient of x^i
double *roots;
double *maxima,*minima,*inflection; //arrays of coordinates of maxima, minima and points of inflection
public:
 Polynomial( int degree_of_polynomial ){
     n = degree_of_polynomial;
     a = new double[n];
     roots = new double[n]; 
     maxima = new double[n-1];
     minima = new double[n-1];
     inflection = new double[n-1];

     ~Polynomial(){
        delete []a;
        delete []roots;
        delete []maxima;
        delete []minima;
        delete []inflection;
    }
 }

有关动态内存分配的更详细说明,请参阅此link