这个错误的原因可能是由于你输出的变量在之前已经定义过了,你在这里又定义了一遍,导致出现了错误
举一个例子:
/*建立一个 CArray 类,求动态一维数组中各元素的最大值、最小值和平均值,并在主 函数中测试。要求如下:
私有成员:*/
#include <iostream>
#include <string.h>
using namespace std;
class CArray
{
private:
int *data;
int max; //元素的最大值
int min;//元素的最小值
float avg;//平均值
public:
CArray(int *data1)
{
data=data1;
}
void Process(int len)//求 data 数组中的最大值、最小值和平均值
{
int i;
float sum=0,avg;//avg需要删除,不然会出错
max=data[0],min=data[0];
for(i=1;i<len;i++)
{
if(max<=data[i])
{
max=data[i];
}
if(min>=data[i])
{
min=data[i];
}
}
for(i=0;i<len;i++)
{
sum=sum+data[i];
}
avg=sum/len;
}
void ShowInfo()//输出数组中元素的最大值、最小值和平均值
{
cout<<max<<" "<<min<<" "<<avg<<endl;
}
};
int main()
{
int i,n,a[10],len;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
CArray arr(a);
arr.Process(n);
arr.ShowInfo();
return 0;
}
由于avg已经是类的私有成员,你还在类的公有成员内定义了它并赋值,编译器认为他是一个未知的值, 所以会出错
删除公有成员函数中定义的avg后结果正确
#include <iostream>
#include <string.h>
using namespace std;
class CArray
{
private:
int *data;
int max; //元素的最大值
int min;//元素的最小值
float avg;//平均值
public:
CArray(int *data1)
{
data=data1;
}
void Process(int len)//求 data 数组中的最大值、最小值和平均值
{
int i;
float sum=0;
max=data[0],min=data[0];
for(i=1;i<len;i++)
{
if(max<=data[i])
{
max=data[i];
}
if(min>=data[i])
{
min=data[i];
}
}
for(i=0;i<len;i++)
{
sum=sum+data[i];
}
avg=sum/len;
}
void ShowInfo()//输出数组中元素的最大值、最小值和平均值
{
cout<<max<<" "<<min<<" "<<avg<<endl;
}
};
int main()
{
int i,n,a[10],len;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
CArray arr(a);
arr.Process(n);
arr.ShowInfo();
return 0;
}
修改后结果正确