'boost :: make_shared': неоднозначный вызов перегруженной функции - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть следующее определение класса:

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 Ответ

2 голосов
/ 02 декабря 2011

Поскольку вы используете ключевое слово 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

...