我有以下类定义:
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':对重载的模糊调用 功能
谁能告诉我为什么?我只定义了一个构造函数。谢谢!
答案 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