请求`num'中的成员`push_back',它是非类型的`int [((unsigned int)((int)n))]'

时间:2011-08-11 06:15:02

标签: c++

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
std::vector<float> num;

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;  
    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());


    //if num is float[n] or float* (num of elements = n)
    float mean = std::accumulate(num, num + n, 0) / n;
    cout<<mean;
}  
//46 no match for 'operator+' in 'num + n' 

6 个答案:

答案 0 :(得分:3)

push_back通常在vector上调用,而不是像int[]这样的数组。

答案 1 :(得分:1)

您正在使用常规的C风格数组而不是std::vector,并且编译器正在抱怨。

num应声明为

std::vector<int> num;

答案 2 :(得分:0)

从错误消息中可以清楚地看出:num不是类的实例,因此您无法在其上调用方法。为什么你认为你可以打电话给push_back?您认为push_back的定义在哪里?

答案 3 :(得分:0)

num不是std::vector,因此您无法为其调用push_back方法。

也许您打算像这样定义num

std::vector<int> num;

请注意,您当然必须相应地修改其余代码。

答案 4 :(得分:0)

int i,j, num[n];

- &GT;

int i,j;
std::vector<int> num;

因为提问时可以用代码替换?说些什么伙伴。

答案 5 :(得分:0)

决定如何以矢量或数组存储数字,然后使用相应的操作。

您似乎编辑了很多问题,因为当您尝试在num中执行向量操作时,编译器正在抱怨,因为num该版本是一个数组。然后当前代码有相反的问题:num被定义为一个向量,你试图应用一个在向量中不可用的操作,而是应用于指针。

可以通过将调用更改为std::accumulate来使用迭代器来修复第二个错误:

float mean = std::accumulate(num.begin(), num.end(), 0) / n;

注意:编辑问题以使现有答案不再有意义是一个非常糟糕的主意。您是StackOverflow的新手,但如果继续使用此模式,则希望关闭您的问题。