Ошибка C2664 при попытке создать unique_ptr

Я пытаюсь выяснить проблему, с которой я столкнулся в своем проекте, и я упростил ее до этого небольшого кусочка кода, который генерирует ошибку C2664. Я не понимаю сообщение об ошибке, кто-нибудь может мне помочь понять? Я гуглил и просмотрел 2 книги по C ++, и этот код — именно то, что указано в них, но он не работает для меня.

Благодарю.

#include <memory>

struct A
{
int b;
};

int main(int argc, char ** argv)
{
A a;

std::unique_ptr<A> a_ptr = std::make_unique<A>(new A);

return 0;
}

А вот и ошибка:

1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>main.cpp
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.12.25827\include\memory(2585): error C2664: 'A::A(const A &)': cannot convert argument 1 from 'A *' to 'A &&'
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.12.25827\include\memory(2584): note: Reason: cannot convert from 'A *' to 'A'
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.12.25827\include\memory(2584): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>d:\users\aksel\documents\visual studio 2017\projects\project1\project1\main.cpp(21): note: see reference to function template instantiation 'std::unique_ptr<A,std::default_delete<_Ty>> std::make_unique<A,A*,0>(A *&&)' being compiled
1>        with
1>        [
1>            _Ty=A
1>        ]
1>Done building project "Project1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1

Решение

Аргумент make_unique — это аргумент конструктора T, а не указатель на экземпляр T, просто используйте обычный ctor unique_ptr, если у вас уже есть указатель на T.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector