3

我有以下类定义:

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':对重载函数的模糊调用

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

4

1 回答 1

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 指令,但最终有一个 using 声明。

看看这个描述:

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

于 2011-12-02T13:41:48.973 回答