2016-01-11 70 views
1

我是C++新手,需要一些幫助。 我想將一個引用傳遞給一個函數並將其傳遞給另一個函數。該參考文獻被傳遞到封裝到另一結構/類的功能:通過一個函數引用的結構/類參考

  1. 我限定的

    Class A { 
        int ax; 
        int ay; 
    }; 
    
  2. 我所定義的:

    Class B 
    { 
        int bx; 
        int by; 
        A: a; 
    }; 
    
  3. 予定義的函數:f1(B& arg)

現在,我們假設aaA類型的對象: 我想通過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) 

} 

感謝。

+1

我已經放了幾個語句終止符。 C++不是Java :-)但是你的問題還不清楚。什麼是「A:a」,什麼是「AA」型?你不想要參考** A **嗎? – Bathsheba

+2

什麼是'A:a;'?你的意思是'一個;'? – Angew

+0

爲什麼不寫一個需要'A&'的函數呢?如果函數需要'B'進行處理,則還需要傳遞'B'。 – molbdnilo

回答

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; 

,並呼籲f1bbf1(bb);f1將通過bb.a訪問aa


另外,如果你想a能夠指「無」,你可以把它的指針,以便它可以是一個空指針。引用必須始終引用有效變量。但是,這似乎並不是你在這裏需要的,所以爲了簡單起見,我把它放在了外面。

+0

或多或少,這是我在尋找的,但可能是我必須更多克萊爾關於真正的目標。現在我會嘗試添加一些細節。 – Kios

0

你必須在聲明它時初始化你的引用。 ,一旦你初始化它,你就不能改變你的「參考」。 你只能改變你引用的變量。

所以你必須要解決這個雙向的: 添加一個構造函數

class A { 
    int ax; 
    int ay; 
}; 

class B 
{ 
    B(A& v) : a(v) {} 
    int bx; 
    int by; 
    A& a; 
}; 

OR

改變您的參考指針;

+0

@ = xFFFFFFF:或多或少這是我在找的東西,但也許我必須要更多克萊爾關於真正的目標。現在我會嘗試添加一些細節。 – Kios