Смотря на Предыдущий стек из 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 аргументов.
К сожалению, другие сайты, которые я искал, не проливают свет на эту проблему.
Любая помощь будет оценена.
VS2012 не полностью поддерживает вариационные шаблоны. Компилятор не поддерживается — вместо этого они моделируются в библиотеке, до 5 параметров по умолчанию. Фактическое число определяется макросом _VARIADIC_MAX
, Определите его в свойствах вашего проекта до достаточно большого значения.
Других решений пока нет …