指向另一个类c ++中对象向量的指针

时间:2014-07-06 14:04:29

标签: c++ class pointers vector

我准备了一个简化的代码示例,说明了我要做的事情。基本上我有3个类AB C.B类读取数据并将其存储在向量中,其中每个条目都是A类的对象。内部类BI现在可以很好地处理存储的数据,但我希望能够通过使用类似。

的引用将数据发送到第3类(或更多类)

B b(...);

C(& b);

对于B的成员,这是有效的,但是如果我尝试创建指向存储的向量的指针则失败。这里重要的是矢量“v”,矢量“w”只存在,因为我想看看int-vector会发生什么(我至少可以用 - > at(..)访问它的内容,但是通过“int gg(int l){return w.at(l);}”返回“仍然失败”。

#include <iostream>
#include <vector>
using namespace std;

class A
{
    string fname;
    int id;
public:
    A(const string a, int ID):fname(a),id(ID) {}
    string rfname() {return fname;}

};

class B
{
    vector<A> v;
    vector<int> w;
public:
    B(const string a, int ID);
    vector<A> *rv() {return &v;}
    vector<int> *rw() {return &w;}
    int gg(int l) {return w.at(l);}
    void ggg(){cout << "test test" << endl;}
};

B::B(const string a, int ID)
{
    v.push_back(A(a,ID));
    w.push_back(ID);
    //cout << "test: " << gg(0) << endl;
}

class C
{
    B *BB;
    vector<int> *u;
    vector<A> *aa;
public:
    C(B *U);
};

C::C (B *U)
{
    BB = U;
    BB->ggg();
    aa = BB->rv();
    u = BB->rw();
    cout << "sdfdsfdsf: " << u->at(0) << endl;
    cout << "kkkkkk: " << aa->rfname() << endl; //this fails
}

int main()
{

    B b("test",24);
    vector<int> *ww;
    ww = b.rw();
    vector<A> *vv;
    vv = b.rv();
    //cout << ww->gg(0) << endl; //this fails
    cout << ww->at(0) << endl;
    //cout << vv[0]->rfname() << endl; //this fails
    C c(&b);

}

基本上我得到像

这样的错误
'class std::vector<A, std::allocator<A> >' has no member named 'rfname'| 

当我尝试aa-&gt; rfname()等等。

我应该注意到,几周前我才重新编程,因为我必须分析一些数据,因此我在编码方面不是很有经验。所以我可能遗漏了一些非常基本的东西,并且会感谢相当简单的解决方案。已经搜索过类似的主题,但我仍然无法让它工作。

1 个答案:

答案 0 :(得分:1)

这是罪魁祸首:

cout << "kkkkkk: " << aa->rfname() << endl; //this fails

aastd::vector<A>*->访问向量的成员。 rfname不是std::vector的成员函数。

但是这行代码的假设是什么呢?您是否尝试打印矢量的全部内容?然后你必须迭代向量并打印每个元素:

for (std::vector<A>::iterator iter = aa->begin(); iter != aa->end(); ++iter)
{
  cout << "kkkkkk: " << iter->rfname() << endl;
}

代码在很多方面仍然是错误的,无法单独解释每个问题。对于初学者来说,rfname应该是一个const成员函数,你根本不应该使用任何指针。而且我非常希望你的所有类,变量和函数都没有被命名为喜欢这个。