类 std::vector<...> 没有名为 [重复] 的成员

Posted

技术标签:

【中文标题】类 std::vector<...> 没有名为 [重复] 的成员【英文标题】:class std::vector<...> has no member named [duplicate] 【发布时间】:2015-03-30 02:52:47 【问题描述】:

我对 C++ 很陌生,我正在尝试使用结构向量, 但是当我尝试编译我的代码时,我不断收到“类 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;

代码中可能还有其他错误,但我现在只想知道向量的东西。 P.S.:这是我在这里的第一个问题 :) 我知道这一天会到来!

【问题讨论】:

你指的是哪一行? (你能把错误信息复制到问题中吗?) 你有一个质量向量数组。你很可能不希望这样。 如果您需要为向量预先分配元素,只需使用v(n) 而不是v[n]。然后继续调试,还有很多小错误,比如masses[i].v &lt;&lt; cin;和后面的那一行 您的 vector&lt;animal&gt; masses[2*c]; 创建了一个向量数组,而不是初始大小的向量 2*c:您应该使用括号而不是括号;后来的masses[i] 操作也有未定义的行为。这很乏味,但使用.at(n) 而不是[n] 来索引你的vectors 可能是个好主意,直​​到你对这种事情有信心。 at() 会抛出一个异常,你至少可以从 catch 得到一个很好的消息。 【参考方案1】:

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

vector<animal> masses[2*c];

应该是

vector<animal> masses(2*c);

【讨论】:

【参考方案2】:

这里是定义和初始化向量的方法:

vector<T> v;//empty

vector<T> v1(v2);//v1 is a copy of v2
vector<T> v1 = v2;

vector<T> v1a, 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>

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

vector<animal> masses(2*c);

【讨论】:

以上是关于类 std::vector<...> 没有名为 [重复] 的成员的主要内容,如果未能解决你的问题,请参考以下文章

在类构造函数中设置 std::vector

使用 std::vector<Eigen::MatrixXd> 进行内存管理

继承 std::vector 时出错

模板typedef与std :: vector有自定义分配器

bcc32:专注于`std::vector<bool>`时出现奇怪的错误

C++ 一个包含多种类型模板类的 std::vector