Ошибка: нет экземпляра перегруженной функции & quot; std :: make_shared & quot; соответствует списку аргументов

Смотря на Предыдущий стек из std: make_shared vs std :: shared_ptr, я попытался реализовать это в проекте UNI. Это был предыдущий «вопрос»:

Я не могу придумать ни одной ситуации, когда

std::shared_ptr<Object> obj(new Object("foo", 1));

было бы предпочтительнее

auto obj = std::make_shared<Object>("foo", 1);

Таким образом я взял этот код:

std::shared_ptr<Triangle> pT1(new Triangle(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0));

И изменил это к этому коду:

auto pT1 = std::make_shared<Triangle>(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0);

Однако std :: make_shared подчеркнут красным, и когда я наведу на него курсор мыши, я получаю сообщение об ошибке:
«Ошибка: ни один экземпляр перегруженной функции» std :: make_shared «не соответствует списку аргументов»

Мой код компилируется и выполняется правильно с первой строкой кода, но если я использую вторую, возникают некоторые ошибки.

Эти ошибки:

`1> —— Начата сборка: Проект: SIT153Canvas, Конфигурация: Отладка Win32 ——
1> main.cpp

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (_V0_t &&, _V1_t &&, _V2_t &&, _V3_t &&, _V4_t &&) ‘: ожидается 5 аргументов — 10 предоставлено

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (_V0_t &&, _V1_t &&, _V2_t &&, _V3_t &&) ‘: ожидается 4 аргумента — 10 предоставлено

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (_V0_t &&, _V1_t &&, _V2_t &&) ‘: ожидается 3 аргумента — 10 предоставлено

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (_V0_t &&, _V1_t &&) ‘: ожидает 2 аргумента — 10 при условии

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (_V0_t &&) ‘: ожидается 1 аргумент — 10 предоставлено

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

1> c: \ users \ steve \ Documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp (54): ошибка C2780: ‘std :: shared_ptr<_Ty> std :: make_shared (void) ‘: ожидает 0 аргументов — 10 предоставлено

1> c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ memory (972): см. Объявление ‘std :: make_shared’

В соответствии с ошибкой, std :: make_shared ожидает максимум 5 аргументов.
К сожалению, другие сайты, которые я искал, не проливают свет на эту проблему.
Любая помощь будет оценена.

4

Решение

VS2012 не полностью поддерживает вариационные шаблоны. Компилятор не поддерживается — вместо этого они моделируются в библиотеке, до 5 параметров по умолчанию. Фактическое число определяется макросом _VARIADIC_MAX, Определите его в свойствах вашего проекта до достаточно большого значения.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]