2016-04-05 46 views
1
O vector<unique_ptr<UserInterface>> bir unique_ptr kullanırken bildiren bir hata alıyorum görünüyor

için unique_ptr bir vektör oluşturma: GörünüşteHata: C2280 Sınıf

Error 1 error C2280: 'std::unique_ptr<UserInterface,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function c:\pr...ude\xmemory0 593 1 Win32Project1

, herhangi bir yapılandırma yapmamı [akıllı] işaretçileri depolamak için izin verir

hiçbir işlev denir bile
#define InterfaceContruct vector<unique_ptr<UserInterface>> 

class UserInterfaceMgmt 
{ 
public: 
    UserInterfaceMgmt(); 
    ~UserInterfaceMgmt(); 

    InterfaceContruct Interface; 

    void AddUIElement(); 
    void RemoveUIElement(); 
    void DrawInterface(); 
    void MoveElement(); 
private: 
}; 

, hata gösterir (InterfaceContruct Interface; örneği) Ben private b kopya kurucu koyarak çalıştı: basit bir yapıya sahip UserInterface sınıfı, Devam ediyor.

.cpp dosyasıdır (std:: ve çoğu diğer kaplar)

#include "stdafx.h" 
#include "UserInterfaceMgmt.h" 

UserInterfaceMgmt::UserInterfaceMgmt() 
{ 
} 

UserInterfaceMgmt::~UserInterfaceMgmt() 
{ 
} 

void UserInterfaceMgmt::DrawInterface(){ 
    for (UINT i = 0; i < Interface.size(); i++) 
    { 
     Interface[i]->Draw(); 
    } 
} 
+0

Bu hata iletisinin örnekleme backtrace nedir? – aschepler

+0

'UserInterface' sınıfınız nasıl görünüyor? – cwschmidt

cevap

2

std::vector kopya inşa edilebilir olduğu değer türü gerektirir. std::unique_ptr kopyalanabilir yapılamaz. std::shared_ptr veya başka kopyalanabilir türler/işaretçiler kullanın.

İpucu, attempting to reference a deleted function'u aramaktır. Bu, = delete'un kullanıldığı bir yöntem var demektir. Örneğin,

struct Foo 
{ 
    Foo(const Foo & rhs) = delete; // A deleted function 
} 
+0

Anladım. Bu işe yarıyor; 'Çalışmasını yapmak için çok eğildi,' 'uçabiliyordum' 'diye biliyordum. Bu benzersiz_ptr <> kopya yapıcıyı siler, ama zekice atmaya çalıştı. –

+0

Temel bir yapılandırmayı test edip cevap olarak işaretlemek için geri geleceğim. –

+1

@RashidEllis: '#define InterfaceContruct vektörünü > 'kullanmamalısınız, fakat' typedef vektör > InterfaceContruct' veya yeni C++ 11 yolu 'InterfaceContruct = vektör kullanarak > '. 'InterfaceContruct = vektör > kullanarak' – Kent