#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
float mean (float num[], float n)
{
int i;
float sum=0;
for(i=0;i<n;i++)
sum=sum+num[i];
return (sum/n);
}
int main()
{
int minusElements;
int n;
cout << "Enter number of Elements:";
cin >> n;
minusElements = n - 1 ;
int i,j, num[n];
float temp;
float f;
for(i=0;i<n;i++)
{
cin >> f;
num.push_back(f);
}
cout << "Enter " << n << " numbers:\n";
for(i=0;i<n;i++)
cin >> num[i];
cin.get();
float m = mean(&num[0], num.size());
}
//33 request for member `push_back' in `num', which is of non-class type `int[((unsigned int)((int)n))]'
//41 request for member `size' in `num', which is of non-class type `int[((unsigned int)((int)n))]'
答案 0 :(得分:5)
第一件事:
int num[numElements];
标准C ++中不允许这样做。其可变长度数组(VLA),因为numElements
不是const
表达式。 VLA仅允许在C99中使用。
cout << "Mean:"<< mean(num,n);
mean()
需要float*
,但num
的类型为int[]
,可以转换为int*
,但不能转换为float*
。因此错误。
解决方案是:在C ++中,使用std::vector<float>
:
#include <vector> //must include this!
std::vector<float> num;
float f;
for(i=0;i<numElements;i++)
{
cin >> f;
num.push_back(f);
}
//then call mean() as
float m = mean(&num[0], num.size());
除此之外,您的mean()
功能被错误地实施了。什么是numElements
?它是一个未初始化的变量,您在for
循环中使用它。这会调用undefined-behavior。解决方案是:您不需要numElements
开头。只需使用传递给函数的n
作为参数。
此外,在C ++中,您甚至不需要函数来计算均值,您可以使用<numeric>
中的函数作为:
#include <numeric>
//if num is std::vector
float mean = std::accumulate(num.begin(), num.end(), 0) / num.size();
//if num is float[n] or float* (num of elements = n)
float mean = std::accumulate(num, num + n, 0) / n;
好的。既然你是初学者,想学习如何解决这个问题。在你尝试了自己不起作用之后,所以你应该如何做到这一点:
#include <iostream>
float mean (float *num, int n)
{
float sum = 0;
for(int i = 0 ; i < n ; i++ )
sum += num[i];
return sum/n;
}
int main()
{
int count;
std::cin >> count;
float *numbers = new float[count]; //allocate memory!
for(int i=0; i< count ;i++)
{
std::cin >> numbers[i];
}
std::cout << mean(numbers, count) << std::endl;
delete [] numbers; //must deallocate the memory!
}
输入(下一行元素后跟的元素数量):
6
12 89 23 12 32 11
输出:
29.8333
在线演示:http://www.ideone.com/hdZPd
注意不建议使用C ++中的C风格编码,但仅限于学习目的。
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
int count;
std::cin >> count;
std::vector<float> numbers(count);
for(int i=0; i< count ;i++)
{
std::cin >> numbers[i];
}
float mean = std::accumulate(numbers.begin(), numbers.end(), 0.0)/ numbers.size();
std::cout << mean << std::endl;
}
输入(下一行元素后跟的元素数量):
6
12 89 23 12 32 11
输出:
29.8333
在线演示:http://www.ideone.com/aZ7u8
希望它能帮助您理解这两种风格的问题和解决方案。
答案 1 :(得分:1)
根据这个问题的标题,我很确定你的问题在于这一行:
int num[numElements], i,j,temp;
你的意思是:
int i,j;
// shouldn't be using num[numElements] in c++ (see Nawaz's answer for why)
float num[], temp; // temp *also* should be a fload based on usage.
您似乎还有一个额外的for(i=0;i<numElements;i++)
答案 2 :(得分:0)
将int num [numElements]更改为float num [numElements]?您正在向需要浮点数组的内容发送一组int。