请求在"num"中请求成员"push_back",其非类类型为"int[((unsigned int)((int)n))]"

request for member `push_back' in `num', which is of non-class type `int[((unsigned int)((int)n))]'

本文关键字:int 请求 类型 unsigned num 成员 push back      更新时间:2023-10-16
#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' 

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

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

num应声明为

std::vector<int> num;

从错误消息中可以清楚地看到:num不是类的实例,因此您不能在它上调用方法。为什么您认为可以在它上面调用push_back?你认为push_back在哪里定义?

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

也许你打算这样定义num

std::vector<int> num;

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

int i,j, num[n];

-->

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

从什么时候开始提问可以被代码取代?说点什么吧,伙计。

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

似乎您对这个问题进行了大量编辑,因为在开头的标题中,当您试图对num中的向量执行运算时,编译器会抱怨,因为该版本中的num是一个数组。那么当前的代码有相反的问题:num被定义为一个向量,并且您试图应用一个在向量中不可用的操作,而是应用于指针。

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

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

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

相关文章: