为什么我从其他错误中获得从“int”到“int *”错误的无效转换?

时间:2016-01-29 01:23:34

标签: c++ pointers compiler-errors

所以我对指针和指针语法都很陌生,我刚刚写了这个函数,但是有大约5-6个构建错误,看了一会儿代码后,我仍然不确定如何解决他们或他们为什么是错误。我是指针和内存的新手,所以我不确定如何修复这些错误以及它们为什么是错误的。感谢您的帮助,非常感谢!

int makeFrequency (int data[], int dSize, int *minDataValue, int     *maxDataValue)
{

  findMinAndMax(data, dSize, minDataValue, maxDataValue);

  int fSize = *minDataValue + *maxDataValue; // invalid operands of types 'int' and 'int*' to binary 'operator+' error?

  int frequency = new int [fSize]; //invalid conversion error?

  if (frequency == NULL)
  {
    return NULL;
  }

  for (int i = 0; i <= fSize; i++)
  {
    frequency[i] = 0; // invalid types 'int[int]' for array subscript error?
  }


      for (int i = 0; i <= dSize; i++)
      {
        int j = data[i] - (*minDataValue)+1; // invalid operands of types 'int' and 'int*' to binary 'operator-' error?
        frequency[j] = frequency[j] + 1; // invalid types 'int[int]' for array subscript error?
      }

      return frequency;
    }

int main() {

  int dSize;
  int *ArrayOfInts;

  cout << "How many data values? ";
  cin >> dSize;

  ArrayOfInts = new int [dSize];

  getData(dSize, ArrayOfInts);

  int *frequency, min, max;

  frequency = makeFrequency (ArrayOfInts, dSize, &min, &max); // invalid conversion error?

  if (frequency == NULL) return -1;

  makeHistogram(frequency, min, max);

  delete [] frequency;

  return 0;
}

1 个答案:

答案 0 :(得分:0)

int frequency = new int [fSize]; //invalid conversion error?

new返回指向堆分配对象的指针。当您分配X时,new会返回X *

new X[n]分配n X个实例,并返回指向X的第一个实例的指针。

(在所有情况下,new也会调用已分配的对象&#39;构造函数,但这是一个无关紧要的点。)

new int [fSize];

因此,此表达式返回int *

int frequency

frequency显然是int

int frequency = new int [fSize];

将上述所有内容放在一起,您在此处尝试将int *分配给int。这是您的转化错误。 frequency应声明为int *