'boost :: make_shared':对重载函数的模糊调用

时间:2011-12-02 12:55:29

标签: c++ boost shared-ptr make-shared

我有以下类定义:

class Portal
{
   public:

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

   ...
};

在其他地方,我想创建一个这样的类的实例:

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

但是,我在Visual Studio 2010中收到以下错误消息:

  

错误C2668:'boost :: make_shared':对重载的模糊调用   功能

谁能告诉我为什么?我只定义了一个构造函数。谢谢!

1 个答案:

答案 0 :(得分: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