类 std::vector<...> 没有命名的成员

class std::vector<...> has no member named

本文关键字:成员 std lt gt vector      更新时间:2023-10-16

我对C++很陌生,我正在尝试使用结构向量,但当我试图编译代码时,我总是得到"classstd::vector'没有名为'p'的成员"。这就是它,顺便说一句:

#include <vector>
#include <cstdlib>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct animal {
    int p;
    int v;
};

bool cmpp (animal a, animal b) { 
    return (a.p < b.p); 
}
bool cmpv (animal a, animal b) { 
    return (a.v < b.v); 
}
bool cmpc (pair<animal, animal> a, pair<animal, animal> b) { 
    return (a.first.p < b.first.p); 
}
int main(){
    int c, s;
    while(scanf("%d %d", &c, &s) != EOF){
        vector<animal> masses[2*c];
        vector<pair<animal, animal> > chamber;
        for (int i = 0; i < 2*c-s; i++){
            masses[i].v = 0;
            masses[i].p = -1;
        }
        for (int i = 2*c-s; i < 2*c; i++){
            masses[i].v << cin;
            masses[i].p << i - 2*c-s;
        }
        sort(masses.begin(), masses.end(), cmpv);
        for(int i = 0; i < c; i++){
            if(chamber[i].p < masses[2*c-i] && chamber[i].p != -1)
                chamber[i] = pair<animal, animal> (masses[i], masses[2*c-i]);
            else
                chamber[i] = pair<animal, animal> (masses[2*c-i], masses[i]);
        }
        sort(chamber.begin(), chamber.end(), cmpc);
        for(int i = 0; i < c; i++){
            printf("%d %d", chamber[i].first.v, chamber[i].second.v)
        }
    }
    return 0;
}

代码中可能还有其他错误,但我现在只想知道向量的事情。附言:这是我在这里的第一个问题:)我就知道这一天会到来!

由于某种原因,您有一个向量数组。

vector<animal> masses[2*c];

应该是

vector<animal> masses(2*c);

以下是定义和初始化矢量的方法:

vector<T> v;//empty
vector<T> v1(v2);//v1 is a copy of v2
vector<T> v1 = v2;
vector<T> v1{a, b, c};//list initialize 
vector<T> v1 = {a, b, c};
vector<T> v(b, e);// v is a copy of the elements in the range denoted by iterators b and e
vector<T> v(n);//v has n value-initialized elements
vector<T> v(n, t);// v has n elements with value t

所以,你的定义并没有达到你想要的效果,

vector<animal> masses[2*c]; //masses is an array of vector<animal>

当你说mass[i]是一个向量而不是动物,没有名为"p"的成员
你应该写:

vector<animal> masses(2*c);