2014-08-30 84 views
0

我有unique_ptrs的向量以下類:實現的unique_ptr模板錯誤

class StatManager 
{ 
private: 
    std::vector<std::unique_ptr<IStat>> stats; 
public: 

    void setStat(const Stat<bool>& stat) { 
     stats.emplace_back(stat.clone()); 
    } 

    void setStat(const Stat<float>& stat) { 
     stats.emplace_back(stat.clone()); 
    } 

    void setStat(const Stat<int>& stat) { 
     stats.emplace_back(stat.clone()); 
    } 

    bool getStatValue(std::string name, float &value) { 
     for (unsigned int x = 0; x < stats.size(); x++) 
     { 
      if (stats.at(x)->getName() == name) { 
       value = stats.at(x)->getAsFloat(); 
       return true; 
      } 
     } 
     return false; 
    } 

    bool getStatValue(std::string name, int &value) { 
     for (unsigned int x = 0; x < stats.size(); x++) 
     { 
      if (stats.at(x)->getName() == name) { 
       value = stats.at(x)->getAsInt(); 
       return true; 
      } 
     } 
     return false; 
    } 

    bool getStatValue(std::string name, bool &value) { 
     for (unsigned int x = 0; x < stats.size(); x++) 
     { 
      if (stats.at(x)->getName() == name) { 
       value = stats.at(x)->getAsBool(); 
       return true; 
      } 
     } 
     return false; 
    } 
}; 

和類是:

class BaseItem 
{ 
private: 
    int id; 
    std::string name; 
public: 
    BaseItem(int itemId, std::string itemName) : id(itemId), name(itemName) {} 

    virtual int getID() = 0; 
    virtual std::string getName() = 0; 
}; 


class Item : public BaseItem 
{ 
private: 
    StatManager statManager; //ERROR HERE trying to implement StatManager 
public: 
    Item(int id, std::string name); 

    virtual int getID(); 
    virtual std::string getName(); 
}; 

我得到試圖在視覺工作室2013以下錯誤使StatManager的屬性:

Error 5 error C2280: 'std::unique_ptr<IStat,std::default_delete<_Ty>>:: 
    unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' 
    : \xmemory0 593 1 GameTheory++ 

所以在我的主類我只是嘗試創建一個本地insta StatManager的NCE和它的工作沒有任何問題,例如:

float f = 0; 
StatManager manager; //Works flawless 
manager.setStat(ItemStat("Durabilit", 100, "")); 
manager.getStatValue("Durabilit", f); 

所以,問題試圖讓StatManager任何類的屬性時,只發生......有什麼我很想念,可能是一些舉動問題與獨特的PTT?我真的不知道,預先感謝。

編輯:

只有當我使用Item類的地方是在主要方法,並試圖利用它的本地實例:

Item item = Item(0, "Test"); 
+0

您可能試圖複製'項目'某處unique_ptr's不能被複制,他們只能被移動 – 2014-08-30 07:04:47

回答

0

這不是讓StatManager的屬性這是失敗的類,它試圖複製它。由於它包含unique_ptrs矢量,整個類不可複製。大概你試圖將它複製到你沒有發佈的代碼中。試圖複製它,當

Item(const Item&) = delete; 

這樣,你會得到一個錯誤直線距離,而不是約的unique_ptr埋了一個錯誤:

爲了更好地診斷此問題的根源,它添加到您的項目類在項目內。

編輯:好吧,你貼剛纔的代碼是哪裏出了問題。

Item item = Item(0, "Test"); 

這意味着「創建項目並將其複製到item相反,這樣做:

Item item(0, "Test"); 

這只是創建一個項目,應該工作

+0

無法相信我mi ss我的上帝必須是小時,並與C#和VB混淆,非常感謝 – ffenix 2014-08-30 07:12:10