2011-12-02 163 views
3

我有下面的類定義:「的boost :: make_shared」:不明確調用重載函數

class Portal 
{ 
    public: 

    Portal(const vector<vec3> &vertices, shared_ptr<Sector> target); 

    ... 
}; 

別的地方,我想創建一個instanceof說類是這樣的:

auto portal = make_shared<Portal>(portalVertices, target); 

錯誤C2668:

不過,我在Visual Studio 2010中收到以下錯誤消息 '的boost :: make_shared':不明確調用重載 功能

有誰能告訴我爲什麼?我只定義了一個構造函數。謝謝!

+0

應該列出的候選人是什麼。 – visitor

回答

2

由於您正在使用關鍵字auto,我假設您正在使用C++ 11功能。 C++ 11還附帶std::make_shared

所以,請嘗試添加命名空間:

auto portal = std::make_shared<Portal>(portalVertices, target); 

auto portal = boost::make_shared<Portal>(portalVertices, target); 

所以我通常在我的代碼做/ .c文件是:

using namespace std; // this is a "using" directive 
.... 
void somefunction() { 
    auto portal = make_shared<Portal>(...); 
} 

由於你提到你在標題中指定了

using boost::make_shared; 

我真的很想看完整的頭文件。因爲我認爲你實際上想要使用一個使用指令,但最終得到一個使用聲明。

看一看這樣的描述:

using指令:http://msdn.microsoft.com/en-us/library/aewtdfs3%28v=vs.80%29.aspx

using聲明:http://msdn.microsoft.com/en-us/library/was37tzw%28v=vs.80%29.aspx

+0

我做了,無濟於事。我應該指出,它適用於其他類,並且我在一個通用頭文件中聲明以下內容: **使用boost :: shared_ptr; 使用boost :: make_shared; ** – vexator

+0

是否嘗試刪除使用boost :: make_shared,然後在代碼中使用auto portal = boost :: make_shared ...? –

+0

**是的,它做到了,謝謝!**現在,我可以以某種方式「un-use」std :: make_shared,這樣我就不必指定要使用哪個名稱空間的模板?另外,我仍然不確定爲什麼會出現這種情況,而不是我項目中的其他+50班。它們都共享相同的基本標題。 – vexator

相關問題