簡體   English   中英

使用XCode / Clang用std :: shared_ptr實例化std :: map時出錯

[英]Error instantiating std::map with std::shared_ptr with XCode/Clang

編輯了更多代碼,再現了錯誤,將地圖更改為unordered_map。

我已經離開並且為純目標C編寫代碼已有一年多了,所以如果這是一個新手錯誤,請原諒!

我在針對iOS 7模擬器的XCode 5中編譯為.mm(Objective-C ++)。 它使用clang-503.0.40。 基於LLVM 3.4。

這是代碼:

typedef uint32_t uint32;

class Actor {
public:
    std::string name;
    std::set<uint32> behaviors;

    Actor() { }
private:
};

class Location {
public:
    // .. some stuff ...
    std::unordered_map<uint32,std::shared_ptr<Actor>> actors;    // A list of actors in the location

    Location() {  }
private:
};

然后在一個函數中我做-

std::shared_ptr<Location> l1(new Location);
std::shared_ptr<Actor> npc(new Actor);
l1->actors.emplace(npc); // ERROR HAPPENS HERE

我將其更改為無序地圖,因為我無法提供“較少”且不需要訂購。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/unordered_map:544:11:沒有匹配的構造函數,用於初始化“ value_type”(也稱為“ pair”)

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/memory:1641:31:實例化功能模板特化'std :: __ 1 :: __ hash_value_type> :: __ hash_value_type& >'在這里要求

有一長串候選構造函數被排除在外,如果您需要查看它們,還可以進行其他操作。

那我犯什么新手錯誤呢?

映射的Emplace需要一個參數作為鍵,然后為要放置的事物添加后續參數。 所以

l1->actors.emplace(npc);

無法工作,因為它僅提供一個參數-沒有鍵。 因為您已經在地圖中構造了想要的東西,所以您根本不需要emplace 您需要指定要將元素放置在哪個鍵上,然后最簡單的選擇是

l1->actors[42] = npc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM