编译器错误:从'int'到'int *'的无效转换[-fpermissive]

时间:2019-02-27 03:06:48

标签: c++

我的程序有问题,并且出现上面的错误。但是,当我查找错误时,其他所有人都有某种int *变量,而与之相比,我没有那么多,并且仍然会收到此错误。

#include <iostream>
#include <fstream>

const int VALUES = 250;

using namespace std;

void minFinder(int nums[]);
void maxFinder(int nums[]);
void arithmeticMeanFinder(int nums[]);
void geometricMeanFinder(int nums[]);
void standardDeviationFinder(int nums[]);

int main()
{
    ifstream file;
    int number, counter;
    int nums [VALUES];
    counter = 0;
    file.open("F://Yes/Untitled.txt");
    file >> number;
    while (!file.fail()){
        counter++;
        nums [counter-1] = number;
        file >> number;}      
    arithmeticMeanFinder(nums[VALUES]);       
    file.close();
    system("pause");
    return 0;
}

void arithmeticMeanFinder (int nums[VALUES])
{
     ifstream file;
     int ct, holder;
     double counter, mean;
     double accum = 0;
     for (ct = 0; ct < VALUES; ct++){
         holder = nums[ct];
         accum = accum + holder;
         counter++;}
     mean = (accum * 1.0) / counter;
     cout << counter << " is the arithmetic mean" << endl;
}

2 个答案:

答案 0 :(得分:2)

此代码:arithmeticMeanFinder(nums[VALUES]);索引到nums中以检索偏移量为VALUES的(不存在)项。

我想你希望它更像是:arithmeticMeanFinder(nums);

其余的代码不是我想要的(例如,它要求文件中的值的数量完全等于VALUES,否则将导致失败),但这是编译器引用的特定问题的来源。

答案 1 :(得分:0)

在您的代码中,您拥有:

void arithmeticMeanFinder (int nums[VALUES])

由于C ++的规则,这等效于:

void arithmeticMeanFinder (int nums[])

而且由于C ++的规则,这等效于:

void arithmeticMeanFinder (int *nums)

因此,当您调用此函数时,您需要编写:

arithmeticMeanFinder(nums); // pass the pointer to first element

代替:

arithmeticMeanFinder(nums[VALUES]);

在上面对arithmeticMeanFinder的调用中,通过表达式nums[VALUES],将第VALUES个元素(即int)作为参数传递。 由于数组nums仅包含VALUES个项目(最大索引为VALUE - 1), 这是一个出站访问。