2012-07-11 71 views
0

我有C++類的構造函數參照結構

class Printer{ 
    struct foo{ 
     int i; 
    }; 
    foo & f; 
}; 

一類打印機,當我打電話打印機的構造,我需要的,因爲f是一個參考初始化女,但我要的是第一調用foo的構造函數並創建它的一個實例,然後將其分配給f。我遇到的問題是如果我打電話

Printer::Printer():f(foo(0)){ } 

有一個錯誤說我不能使用對結構的臨時實例的引用。任何解決這個問題的方法?

感謝

+0

爲什麼'F'參考? – 2012-07-11 20:39:41

+0

你可以使它成爲'const foo&f',但正如Oli指出的那樣,我不確定你爲什麼需要它。 – chris 2012-07-11 20:40:28

+0

爲什麼不添加一個構造函數到'f',然後你可以在'Printer'的構造函數初始化列表中初始化它? – 2012-07-11 20:44:48

回答

0

我覺得你其實不想foofoo自身的引用。

當您致電foo(0)時,它會創建一個結構並將其作爲「浮動」對象返回。你不能爲它分配一個引用,因爲沒有人「保留」它,只要構造函數退出,它就會被丟棄。

所以,如果你想保留對它的引用,你首先必須將它存儲在一個實際的對象中,這個對象將是持久的。在這種情況下,您可能只想將整個結構保留在類中。

+0

Michał,不要忘記,'const'引用會延長對象的生命週期。 'const foo&my_foo = foo(0)'是有效的。所以你只有在非const引用的情況下才是正確的。 – 2012-07-29 03:43:41

2

參考在這種情況下沒有任何意義。請嘗試以下操作來代替:

class Printer{ 
    struct foo{ 
     int i; 
     foo(int i_) : i(i_) {} // Define a constructor 
    }; 

    foo f; // Not a reference anymore! 

public: 
    Printer::Printer() : f(0) {} // Initialise f 
}; 
0

您可以奧利的答案通過聲明結構foo和一步到位定義˚F稍短:

class Printer{ 
    struct foo{ 
     int i; 
     foo(int i_) : i(i_) {} 
    } f; 
public: 
    Printer() : f(0) {} 
};