2015-05-14 4 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

Возвращение локальных объектов из функции в порядке. Вы возвращаете объект Xyz только тогда, когда node = 5, что, если узел не равен 5. Вы должны вернуть некоторый действительный объект Xyz.

+0

Ясно, что в этом случае это не нормально, поскольку это вызывает ошибку компиляции. В общем, это прекрасно, если у объекта есть доступная копия или механизм перемещения. –

+0

Когда это не 5, я подумал, что выброшу исключение. Я не опубликовал весь код. Майк Сеймур, прав, и я читаю о конструкторах копий. – user1876942