3 votes

Erreur C2664 lorsqu'on essaie de créer un unique_ptr

J'essaie de résoudre un problème que j'ai dans mon projet, et je l'ai simplifié à ce petit bout de code qui génère l'erreur C2664. Je ne comprends pas le message d'erreur, quelqu'un pourrait-il m'aider à comprendre ? J'ai fait des recherches sur Internet et j'ai consulté deux livres sur le C++. Ce code correspond exactement à ce qui est indiqué dans ces livres, mais il ne fonctionne pas pour moi.

Merci.

#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;
}

Et voici l'erreur :

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 ==========

2voto

SoronelHaetir Points 7859

L'argument de make_unique est l'argument d'un constructeur de T, pas un pointeur vers une instance de T, utilisez simplement le ctor normal unique_ptr si vous avez déjà un pointeur vers un T.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X