你应该让你的问题更具体,编辑它并发布你试图做的事情。如果你的意思是做一些尊重 oop-rules 的事情,那么这出戏是这样的:
#include<iostream>
#include<vector>
class A{
public:
void fill_up_the_vector() { v=std::vector<int>(3); v[0]=0; v[1]=1; v[2]=4; }
void add( a.add(i); ) { v.push_back(i); }
void display_last() const { std::cout<<v[v.size()-1]; }
private:
std::vector<int> v;
};
class B{
public:
B(){ a.fill_up_the_vector(); } // B just *instructs* A to fill up its vector.
void add_value(int i) { a.add(i); }
void display() const { a.display_last(); }
private:
A a;
};
int main()
{
B b;
b.add_value(9);
b.display(); // reads v through A.
}
请注意,上面的这个例子与你所问的有点不同。我发布它是因为我认为您应该记住,根据 OOP 规则
- 您不想直接访问 A 中的值,
- 如果您打算访问 A 中的值,B 应该有一个类型为 A 的成员,
- 如果您从 B 填写了值,则应该通过 B 访问 A 中的值。
另一种方法不是OOP:
struct A{
std::vector<int> v;
};
struct B{
static void fill_A(A& a) const { a.v = std::vector<int>(3); a.v[0]=0; a.v[1]=1; a.v[2]=4; }
};
int main()
{
A a;
B::fill_A(a);
a.v.push_back(9);
std::cout << a.v[a.v.size()-1];
}
但是这段代码很可怕。