2016-12-23 5 views
0

私は何が間違っているのか分かりませんが、プッシュ機能に問題があります。私たちを手伝ってくれますか?単独リンクリストプッシュ機能エラー

#include<iostream> 
#include<memory> 
using namespace std; 

struct lista { 
    int value; 
    unique_ptr<lista>next; 

    lista(int value):value(value), next(nullptr){} 


}; 
void push(int x, unique_ptr<lista> &h) { 
    unique_ptr<lista>alok_pam_x = make_unique<lista>(x); 
    if (alok_pam_x!= nullptr) 
    { 
     (alok_pam_x->next) = h; 
     h = alok_pam_x; 

    } 

} 

そして、私はエラーを持っている:

Severity Code Description Project File Line Suppression State Error C2280 'std::unique_ptr> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function
Severity Code Description Project File Line Suppression State Error (active) function "std::unique_ptr<_Ty, _Dx>::operator=(const std::unique_ptr<_Ty, _Dx>::_Myt &) [with _Ty=lista, _Dx=std::default_delete]" (declared at line 1436 of "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\memory") cannot be referenced -- it is a deleted function

答えて

0

次の2つの場所でunique_ptrをコピーしようとしているが、unique_ptrは、それをコピーすることができない、唯一のタイプの動きです。代わりにstd::moveする必要があります。

また、make_uniqueを呼び出した後のnullptrのチェックは無意味です。割り当てが失敗した場合、std::bad_allocが返され、チェックには到達しないためです。

だからあなたpush機能は、この

void push(int x, unique_ptr<lista> &h) { 
    auto alok_pam_x = make_unique<lista>(x); 
    alok_pam_x->next = move(h); 
    h = move(alok_pam_x); 
} 

のようになります。最後に、あなたはおそらくlistapushメンバ関数にすることを検討すべきです。

関連する問題