我有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");
您可能試圖複製'項目'某處unique_ptr's不能被複制,他們只能被移動 – 2014-08-30 07:04:47