试图做一些规范化,并不断得到错误
问题描述:
我不断收到错误“错误:从'int *'无效转换为'int'[-fpermissive]”,我不知道为什么;试图做一些规范化,并不断得到错误
我正在做这个作业,我们还没有讨论指针,所以使用它们是不可能的。
这里是我的代码(PS我是新来的编程)
#include <iostream>
#include <cmath>
using namespace std;
double normalize (int , int);
double normalize (double,double);
int n=0;
int i=0;
const double SIZE=5;
double mean=0;
double meanDivide;
int main()
{
char dataType;
int norm[5];
int value =1;
cout<<"Which data type do you want (i, d): ";
cin>>dataType;
if (dataType =='i')
{
while(value<5)
{
cout<<"Enter value "<<value << ": ";
cin>> norm[n];
value++;
}
}
else if (dataType=='d')
{
cout<<"Enter value "<<value << ": ";
cin>> norm[n];
value++;
}
cout<<"The mean is: "<<normalize(norm,5)/* The error comes from here and
I do not know what to do or why */
<<endl;
cout<<"The normalized values: "<<endl;
int j=0;
cout<<"norm[1] = "<<norm[j]<<endl;
j++;
cout<<"norm[2] = "<<norm[j]<<endl;
j++;
cout<<"norm[3] = "<<norm[j]<<endl;
j++;
cout<<"norm[4] = "<<norm[j]<<endl;
j++;
cout<<"norm[5] = "<<norm[j]<<endl;
return 0;
}
double normalize(int norm[],int SIZE)
{
while(i<6)
{
meanDivide +=norm[i];
i++;
}
i=0;
while (i<n)
{
norm[i] -=meanDivide;
i++;
}
mean = meanDivide/5;
return mean;
}
double normalize (double norm[],double SIZE)
{
while(i<6)
{
meanDivide +=norm[i];
i++;
}
i=0;
while (i<n)
{
norm[i] -=meanDivide;
i++;
}
mean = meanDivide/5;
return mean;
}
这是我应该得到的输出。
//For integers:
Which data type do you want (i, d): i
Enter value 1: 0
Enter value 2: 3
Enter value 3: 4
Enter value 4: 8
Enter value 5: 12
The mean is: 5.4
The normalized values:
norm[1] = -5
norm[2] = -2
norm[3] = -1
norm[4] = 2
norm[5] = 6
//For doubles:
Which data type do you want (i, d): d
Enter value 1: 5.5
Enter value 2: 1.23
Enter value 3: 2.02
Enter value 4: 9.99
Enter value 5: 6.32
The mean is: 5.012
The normalized values:
norm[1] = 0.488
norm[2] = -3.782
norm[3] = -2.992
norm[4] = 4.978
norm[5] = 1.308
答
你正在声明你的方法是这样的:
double normalize (int , int);
double normalize(double*, double);
然而,你正试图实施他们想:
double normalize(int norm[], int SIZE) {/*...*/}
double normalize(double norm[], double SIZE) {/*...*/}
注意,参数类型是不一样的,int, int
是不一样的。这意味着您的实现实际上定义了一个全新的函数,与您在示例顶部声明的函数无关。当您致电normalize
函数时,只发现初始声明,并尝试匹配它失败的int norm[5]
到int
。要解决这个问题,请确保声明是正确的。将声明更改为:
double normalize(int[], int);
double normalize(double[], double);
这将修复您在此问题中询问的错误,但您的示例仍存在其他问题。其中一些在评论中被标识。
答
您申报非指针参数原型:
double normalize (int , int);
double normalize (double,double);
与您通话的指针参数:
cout<<"The mean is: "<<normalize(norm,5)
C++编译器在这一点不关心与指针的实现参数如下。尝试将实现与原型匹配。
而且
一)你增加value
但使用n
作为指数:
CIN >>规范[N]; value ++;
b)您忽略SIZE
三)大小应该是在这两种情况下无符号整型 d)你的例子不是最小(https://stackoverflow.com/help/mcve)
您可能会发现这通常是有用的:
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
你正在声明你的方法像'double normalize(int,int);'但是像'normalize(int [],int)'一样实现它们。 –
尽量避免使用全局变量,使用它们是一种不好的做法。还有一件事我不理解......你每次收到价值都不应该增加'n'吗? –
@FrançoisAndrieux我应该怎么做才能解决它? –