试图做一些规范化,并不断得到错误

问题描述:

我不断收到错误“错误:从'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 
+2

你正在声明你的方法像'double normalize(int,int);'但是像'normalize(int [],int)'一样实现它们。 –

+1

尽量避免使用全局变量,使用它们是一种不好的做法。还有一件事我不理解......你每次收到价值都不应该增加'n'吗? –

+0

@FrançoisAndrieux我应该怎么做才能解决它? –

你正在声明你的方法是这样的:

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/