C++ ';boost::使#u共享';:对重载函数的不明确调用

C++ ';boost::使#u共享';:对重载函数的不明确调用,c++,boost,shared-ptr,make-shared,C++,Boost,Shared Ptr,Make Shared,我得到了以下类定义: class Portal { public: Portal( const vector<vec3> &vertices, shared_ptr<Sector> target ); ... }; 类门户 { 公众: 入口(常量向量和顶点、共享的ptr目标); ... }; 在其他地方,我想为上述类创建一个实例,如下所示: auto portal = make_shared<Portal>( portalVe

我得到了以下类定义:

class Portal
{
   public:

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

   ...
};
类门户
{
公众:
入口(常量向量和顶点、共享的ptr目标);
...
};
在其他地方,我想为上述类创建一个实例,如下所示:

auto portal = make_shared<Portal>( portalVertices, target );
auto-portal=make_共享(portalerties,target);
但是,我在Visual Studio 2010中收到以下错误消息:

错误C2668:“boost::make_shared”:对重载的调用不明确 作用


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

当您使用关键字auto时,我假设您使用的是C++11功能。 C++11还附带了
std::make_shared

因此,请尝试添加命名空间:

auto portal = std::make_shared<Portal>( portalVertices, target );
我真的很想看到完整的头文件。我认为您实际上想要一个using指令,但最终得到了一个using声明

请查看以下描述:

使用指令:


使用
声明:

我做了,但没有用。我应该指出,它可以与其他类一起正常工作,并且我在一个公共头文件中声明了以下内容:使用boost::shared_ptr;使用boost::使_共享;您是否尝试过使用boost::make_shared删除,然后在代码auto portal=boost::make_shared中使用?是的,成功了,谢谢!现在,我可以以某种方式“取消使用”std::make_shared,这样我就不必指定要使用哪个名称空间的模板了吗?另外,我仍然不确定为什么这个类会发生这种情况,但我的项目中的其他+50类却不会。它们都共享相同的基本头。或者,建议简单地依赖MS的共享_ptr实现吗?@Vexator:Simple:不要使用
使用名称空间std,尤其不是在标题中。再输入5个字符真的没有问题,特别是如果它能让你避免这样的歧义,它应该列出候选字符。
auto portal = boost::make_shared<Portal>( portalVertices, target );
using namespace std; // this is a "using" directive
....
void somefunction() {
    auto portal = make_shared<Portal>( ... );
}
using boost::make_shared;