【问题标题】:Rquest for member 'push_back' vectors c++请求成员'push_back'向量c ++
【发布时间】:2018-08-01 16:07:09
【问题描述】:

我有这个代码:

#include <iostream>
#include <vector>

using namespace std;
const int NMAX=10;
vector <int>sir[NMAX];
int s[10];

int main()
{
    int n, i;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>s[i];
    sir.push_back(s);
    for(i=0;i<sir[0].push_back();i++)
        cout<<sir[0][i]<<" ";
    return 0;
}

在第 15 行我有一个错误:

请求'sir'中的成员'push_back',它不是类类型'std::vector[10]'。

为什么会出现这个错误?

【问题讨论】:

  • sir[0].push_back() 什么都不推。 push_backhere 需要 int 来推回。 push_back 也返回 void,因此没有返回值可与 i 进行比较。
  • 修复编译器问题的方法不止一种。从我们的代码中不清楚您要做什么。
  • 我想要一个 2D int 向量
  • @B.Botzki 仔细查看您自己的代码 -- {whatever_type} sir[NMAX];。 sir 是一个 {whatever_type} 数组。然后你这样做:sir.。没有可应用于数组的. 运算符。所以你的问题是 not std::vector.
  • 这里的第一个问题是,从声明vector &lt;int&gt;sir[NMAX]; 来看,sir 是一个向量数组,而不是单个向量。 C 风格的数组显然没有 push_back() 方法,这是您的编译器错误的来源。您还应该问自己i&lt;sir[0].push_back() 应该做什么,push_back 需要一个参数并返回 void

标签: c++ vector compiler-errors


【解决方案1】:

使用数组或向量,但没有理由混合使用它们。

另外,看起来你的意思是.size(),而你是.push_back()

假设您需要向量,我们可以将其设为 2D 向量并修复 .size() 错误:

const int NMAX=10;
vector <vector<int>> sir;
vector<int> s(10);

int main()
{
    int n, i;
    cin>>n;
    for(i=1;i<=n;i++)
        cin >> s[i];
    sir.push_back(s);
    for(i=0;i < sir[0].size();i++)
        cout<<sir[0][i]<<" ";
    return 0;
}

【讨论】:

  • 我也有同样的问题。
  • Seems to work(至少它应该编译)
  • 虽然现在有几件事需要注意。 NMAX 不再使用,如果n 大于或等于 10,您可能会遇到段错误。
  • 段错误就可以了。您需要担心的是这个 UB 的所有其他可能结果
猜你喜欢
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多