我是C ++的新手,需要一些帮助。 我想把一个引用传递给一个functon并将它传递给另一个函数。此引用传递给封装到另一个结构/类中的函数:
我定义了一个
Class A {
int ax;
int ay;
};
我定义了一个:
Class B
{
int bx;
int by;
A: a;
};
我定义了一个函数:f1(B& arg)
现在,让我们说aa
是A
类型的对象:
我想传递aa
作为函数f1
的引用,但是在class B
内。
像这样:
B bb;
bb.b1=10
bb.b2=20
bb.a=aa ==> here I want reference to a
call f1(*bb)
但引用来自另一个函数,所以finla的东西是:
caller::f2(&A arg)
{
B bb;
bb.b1=10
bb.b2=20
bb.a=arg==> here I want reference to a
call f1(*bb)
}
感谢。
答案 0 :(得分:0)
您必须在声明时初始化您的参考。 初始化后,您无法更改“参考”。 你只能改变你所引用的变量。
所以你有两种方法来解决这个问题: 添加构造函数
class A {
int ax;
int ay;
};
class B
{
B(A& v) : a(v) {}
int bx;
int by;
A& a;
};
OR
更改对指针的引用;
答案 1 :(得分:0)
我希望传递aa作为函数f1的引用,但是在类B中
然后,您需要将a
作为参考变量(使用&
):
A& a;
引用需要显式初始化,因此您需要为B
提供构造函数来执行此操作:
class B
{
public:
B(A& a) : a(a) {} // constructor, to make `a` refer to the given parameter
int bx;
int by;
A& a;
};
现在你可以这样做:
B bb(aa); // passes `aa` to B's constructor
bb.b1 = 10;
bb.b2 = 20;
并使用f1
致电bb
:f1(bb);
和f1
将通过aa
访问bb.a
。
或者,如果您希望a
能够引用“nothing”,则可以将其设为指针,以便它可以是空指针。引用必须始终引用有效变量。但这似乎不是你需要的,所以为了简单起见我把它留了出来。