2010-07-04 22 views
0

我得到了在C++函數,它包裝的輸出流構造函數,因此它可以在一個指針傳遞給一個父類,它的運行中,ALA:直接從函數返回類實例的要求?

pf_istream PF_Plugin::pf_open_in() { 
    return  pf_istream(this); 
} 

當我這樣做的,但是,我得到的是這樣的:

pf_plugin.cc:103: error: no matching function for call to ‘pf_istream::pf_istream(pf_istream)’

pf_istream.hh:36: note: candidates are: pf_istream::pf_istream(const PF_Plugin*)

pf_istream.hh:29: note: pf_istream::pf_istream(pf_istream&)

我有定義的拷貝構造函數和賦值運算符(如上面可以看出),如果我寫的功能,像這樣:

pf_istream PF_Plugin::pf_open_in() { 
    pf_istream to_ret(this); 
    return  to_ret; 
} 

它工作得很好。我得到類似的錯誤,如果我嘗試將pf_istream實例都可以直接從呼叫分配功能,如:

pf_istream inFile = pf_open_in(); 

些什麼,我需要補充,使這項工作?

回答

2
> pf_istream::pf_istream(pf_istream&) 

這是你的問題。它沒有正確地找到你的拷貝構造函數,因爲它傳遞了臨時的。你的拷貝構造函數應該採取const&,像這樣:

pf_istream::pf_istream(const pf_istream&) { ... } 
+0

嗯我的問題是,這些pf_istream對象拷貝語義是這樣的:複製一個通過底層輸出流的新元素的所有權,所以我不得不離開我的複製構造函數非const。我該如何處理? – 2010-07-04 01:55:19

+1

嗯,理想情況下,你用不同的設計來解決它;)你遇到了與'std :: auto_ptr'相同的問題,而auto_ptr是一個相當有爭議的話題:)請看這裏:http://www.aristeia.com /BookErrata/auto_ptr-update.html – Stephen 2010-07-04 02:01:36

+0

甜我會檢查出來,謝謝! – 2010-07-04 02:05:36