2016-04-05 6 views
1

Es scheint, dass, wenn ein unique_ptr in vector<unique_ptr<UserInterface>> ich mit einem Fehler besagt:Fehler: C2280 einen Vektor von unique_ptr Klasse Erstellen

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

Scheinbar erlaubt keine Konfiguration speichern mir [Smart] Zeiger auf die Userinterface-Klasse, die eine einfache Struktur hat:

#define InterfaceContruct vector<unique_ptr<UserInterface>> 

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

    InterfaceContruct Interface; 

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

Auch wenn keine Funktion aufgerufen wird, wird der Fehler auftaucht (InterfaceContruct Interface; instanziiert) ich habe versucht, den Kopierkonstruktor in private b setzen Aber es bleibt bestehen.

.cpp Die Datei ist:

#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

Was ist die Instanziierung backtrace für diese Fehlermeldung? – aschepler

+0

Wie sieht Ihre Klasse 'UserInterface' aus? – cwschmidt

Antwort

2

std::vector (und den meisten anderen Behälter in std::) erfordern den Wert Typ-Kopie-konstruierbar zu sein. std::unique_ptr ist nicht kopierbar. Verwenden Sie std::shared_ptr oder andere kopierbare Typen/Zeiger.

Der Schlüssel ist nach attempting to reference a deleted function zu suchen. Dies bedeutet, dass es eine Methode gibt, mit der = delete verwendet wurde. Zum Beispiel:

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

Ich verstehe. Das funktioniert; "Ich war so darauf aus, es zum Laufen zu bringen, ich" wusste ", dass ich fliegen könnte. Ich wusste, dass "unique_ptr <>" den Kopierkonstruktor löscht, aber versuchte, Klugheit darauf zu werfen. –

+0

Ich werde eine Grundkonfiguration testen und zurückkommen, um als Antwort zu markieren. –

+1

@RashidEllis: Sie sollten '#define InterfaceConstruct vector >' nicht verwenden, aber 'typedef vector > InterfaceConstruct' oder den neuen C++ 11-Weg 'using InterfaceConstruct = vector > '. – Kent

Verwandte Themen