类std::vector<&燃气轮机;没有指定成员 我对C++非常陌生,我尝试使用一个结构向量, 但当我试图编译代码时,我总是得到“class std::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; } #包括 #包括 #包括 #包括 使用名称空间std; 结构动物{ INTP; INTV; }; 布尔cmpp(动物a、动物b){ 回报率(a.p

类std::vector<&燃气轮机;没有指定成员 我对C++非常陌生,我尝试使用一个结构向量, 但当我试图编译代码时,我总是得到“class std::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; } #包括 #包括 #包括 #包括 使用名称空间std; 结构动物{ INTP; INTV; }; 布尔cmpp(动物a、动物b){ 回报率(a.p,c++,vector,struct,C++,Vector,Struct,出于某种原因,你有一个向量数组 vector<animal> masses[2*c]; 矢量质量[2*c]; 应该是 vector<animal> masses(2*c); 矢量质量(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,

出于某种原因,你有一个向量数组

vector<animal> masses[2*c];
矢量质量[2*c];
应该是

vector<animal> masses(2*c);
矢量质量(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
向量v;//为空 向量v1(v2);//v1是v2的副本 向量v1=v2; 向量v1{a,b,c};//列表初始化 向量v1={a,b,c}; 向量v(b,e);//v是迭代器b和e表示的范围内元素的副本 向量v(n);//v有n个值初始化的元素 向量v(n,t);//v有n个值为t的元素 所以你的定义不是你想要的

vector<animal> masses[2*c]; //masses is an array of vector<animal>
向量质量[2*c];//质量是向量的数组
当你说质量[i]是一个载体而不是动物时,它没有名为“p”的成员
你应该写:

vector<animal> masses(2*c);
矢量质量(2*c);

你指的是哪一行?(你能把错误信息复制到问题中吗?)你有一个质量向量数组。你很可能不想这样。如果你需要为向量预先分配元素,只需使用
v(n)
而不是
v[n]
。然后,继续调试,因为还有许多其他小错误,比如
masks[i].v你的
向量块[2*c];
创建一个向量数组,而不是初始大小的向量
2*c
:你应该使用括号而不是括号;正如后面的
向量块[i]
操作有未定义的行为。这很乏味,但最好使用
.at(n)
而不是
[n]
向量编制索引,直到您对这类事情有信心。
at()
将引发异常,您至少可以
捕获
并从中获得一条好消息。