class Printer{
struct foo{
int i;
};
foo & f;
};
一類打印機,當我打電話打印機的構造,我需要的,因爲f是一個參考初始化女,但我要的是第一調用foo的構造函數並創建它的一個實例,然後將其分配給f。我遇到的問題是如果我打電話
Printer::Printer():f(foo(0)){ }
有一個錯誤說我不能使用對結構的臨時實例的引用。任何解決這個問題的方法?
感謝
class Printer{
struct foo{
int i;
};
foo & f;
};
一類打印機,當我打電話打印機的構造,我需要的,因爲f是一個參考初始化女,但我要的是第一調用foo的構造函數並創建它的一個實例,然後將其分配給f。我遇到的問題是如果我打電話
Printer::Printer():f(foo(0)){ }
有一個錯誤說我不能使用對結構的臨時實例的引用。任何解決這個問題的方法?
感謝
我覺得你其實不想foo
但foo
自身的引用。
當您致電foo(0)
時,它會創建一個結構並將其作爲「浮動」對象返回。你不能爲它分配一個引用,因爲沒有人「保留」它,只要構造函數退出,它就會被丟棄。
所以,如果你想保留對它的引用,你首先必須將它存儲在一個實際的對象中,這個對象將是持久的。在這種情況下,您可能只想將整個結構保留在類中。
Michał,不要忘記,'const'引用會延長對象的生命週期。 'const foo&my_foo = foo(0)'是有效的。所以你只有在非const引用的情況下才是正確的。 – 2012-07-29 03:43:41
參考在這種情況下沒有任何意義。請嘗試以下操作來代替:
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
};
您可以奧利的答案通過聲明結構foo和一步到位定義˚F稍短:
class Printer{
struct foo{
int i;
foo(int i_) : i(i_) {}
} f;
public:
Printer() : f(0) {}
};
爲什麼'F'參考? – 2012-07-11 20:39:41
你可以使它成爲'const foo&f',但正如Oli指出的那樣,我不確定你爲什麼需要它。 – chris 2012-07-11 20:40:28
爲什麼不添加一個構造函數到'f',然後你可以在'Printer'的構造函數初始化列表中初始化它? – 2012-07-11 20:44:48