2015-05-14 36 views
-8

我也做了下面的代碼:返回局部對象在函數

Xyz CV::Init(Source& node) 
{ 

    if (node == 5) 
    { 
     Xyz nodeRelay(node.getNodeQ()); 
     nodeRelay.setInputNode(node); 
     return nodeRelay; 
    } 
} 

我用它喜歡:

Xyz xyz = Init(center); 

當我嘗試編譯,我得到的錯誤:

error: use of deleted function 

我正在使用C++ 11和GCC 4.9.0

Xy Z是這樣的:

Xyz::Xyz(uint8_t type): 
BaseNode(), 
m_type(type) 
{ 

} 

的錯誤是在該行:

return nodeRelay; 

如果我身上拿走然後再編譯。

+2

「Xyz」的聲明是怎麼樣的? –

+0

我添加了該信息。 – user1876942

+0

這不是我所要求的類聲明。 –

回答

0

從函數返回本地對象是好的。只有在節點= 5時返回Xyz對象,如果節點不等於5,該怎麼辦。您應該返回一些Xyz的有效對象。

+0

顯然,在這種情況下它不好,因爲它會導致編譯錯誤。一般來說,如果對象具有可訪問的副本或移動構造函數,那很好。 –

+0

當它不是5時,我想我會拋出一個異常。我沒有發佈所有的代碼。邁克西摩,是正確的,我正在閱讀有關複製構造函數。 – user1876942