【发布时间】: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<A>*指针而不是简单的成员std::vector<A> aa? -
错误信息似乎很清楚。如果您要问一个问题,那很可能就是它的答案。
-
至于我的第一条评论:在课堂上
Cstd::vector<A>* aa;应该是std::vector<A>& aa;,不管这有什么好处。