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

Posted

技术标签:

【中文标题】指向另一个类 c++ 中对象向量的指针【英文标题】:Pointer to Vector of Objects in another Class c++ 【发布时间】:2014-07-06 14:04:29 【问题描述】:

我准备了一个简化的代码示例来说明我正在尝试做的事情。基本上我有 3 个 A B C 类。B 类读取数据并将其存储在一个向量中,其中每个条目都是 A 类的一个对象。在 B 类内部,我现在可以很好地处理存储的数据,但我希望能够通过将数据放到第 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->rfname() 等等时。

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

【问题讨论】:

这段代码在很多方面都是错误的,并且带有严重的误解,以至于它过于宽泛,无法在此处正确解决所有这些问题。但是对于初学者来说:到底为什么你使用 std::vector&lt;A&gt;* 指针而不是简单的成员 std::vector&lt;A&gt; aa 错误信息似乎很清楚。如果您要问一个问题,那很可能就是它的答案。 至于我的第一条评论:在课堂上C std::vector&lt;A&gt;* aa; 应该是std::vector&lt;A&gt;&amp; aa;,不管这有什么好处。 【参考方案1】:

这是罪魁祸首:

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

aa 是一个std::vector&lt;A&gt;*-&gt; 访问向量的成员。 rfname 不是 std::vector 的成员函数。

但无论如何,这行代码的假定含义是什么?您是否尝试打印矢量的全部内容?然后你必须遍历向量并打印每个元素:

for (std::vector<A>::iterator iter = aa->begin(); iter != aa->end(); ++iter)

  cout << "kkkkkk: " << iter->rfname() << endl;

代码在很多方面仍然是错误的,无法单独解释每个问题。对于初学者,rfname 应该是一个 const 成员函数,并且您可能根本不应该使用任何指针。我真的希望你所有的类、变量和函数都不是真的像这样命名的。

【讨论】:

现在期待来自 OP 的大量回调。但无论如何 +1,很好地解释了第一名发生了什么,以及如何解决它。 它只是对实际发生的事情的简化代码。实际发生的是,B 类读取了大量数据,这些数据存储在 2 个向量中(1 个包含日期等文件信息,文件中的其他实际数据)。现在的目的是对数据进行各种计算并给出,与这里发布无关。我只想要以某种方式传递一个指向数据的指针,这样我就可以将已经完整的读入信息传递给不同的类,这样我就不必将每个算法都写成 B 类的成员。跨度> @MilesTeg 如果这已经简化,您最好花时间写一封MCVE。

以上是关于指向另一个类 c++ 中对象向量的指针的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 中的“指向对象的指针”向量访问对象

用于对包含指向自定义类对象的指针的向量进行排序的比较器

当指针指向的对象被另一个类的实例删除时重新分配指针

指向失去价值的对象向量的指针

如何通过 C++ 中指向该数组的指针访问另一个类中的数组?

C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用