Следующий исходный код даже не скомпилируется, если строка вектора clear () не закомментирована.Кто-нибудь может объяснить мне, почему и как это исправить?
#include <vector>
class Class
{
public:
typedef std::unique_ptr<int> Variable;
public:
Class() {}
Class(Class&& other) { variables = std::move(other.variables); }
private:
std::vector<Variable> variables;
};
void main()
{
std::vector<Class> container;
container.push_back(Class());
container.clear();
}
Я должен отметить, что это было опробовано в компиляторе MS Visual Studio 2010 (можно сказать, что это половина C ++ 11реализация).К сожалению, я не нашел ни одного онлайн-компилятора, который позволял бы использовать VS 2010.
В любом случае, сообщение об ошибке следующее:
1>------ Operación Generar iniciada: proyecto: Binary, configuración: Debug Win32 ------
1>Compilación iniciada a las 30/05/2018 13:28:52.
1>InitializeBuildStatus:
1> Aplicando tarea Touch a "Debug\Binary.unsuccessfulbuild".
1>ClCompile:
1> Main.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2156): error C2248: 'std::unique_ptr<_Ty>::operator =' : no se puede obtener acceso al miembro private miembro declarado en la clase 'std::unique_ptr<_Ty>'
1> with
1> [
1> _Ty=int
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\memory(2352) : vea la declaración de 'std::unique_ptr<_Ty>::operator ='
1> with
1> [
1> _Ty=int
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2177) : vea la referencia a la creación de instancias de plantilla de función '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)' que se está compilando
1> with
1> [
1> _OutIt=std::unique_ptr<int> *,
1> _InIt=std::unique_ptr<int> *
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(719) : vea la referencia a la creación de instancias de plantilla de función '_OutIt std::_Copy_impl<std::unique_ptr<_Ty>*,std::unique_ptr<_Ty>*>(_InIt,_InIt,_OutIt)' que se está compilando
1> with
1> [
1> _OutIt=std::unique_ptr<int> *,
1> _Ty=int,
1> _InIt=std::unique_ptr<int> *
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(709) : durante la compilación de la función miembro de plantilla de clase 'std::vector<_Ty> &std::vector<_Ty>::operator =(const std::vector<_Ty> &)'
1> with
1> [
1> _Ty=Class::Variable
1> ]
1> c:\vc\protocolreader\main.cpp(13) : vea la referencia a la creación de instancias de plantilla de clase 'std::vector<_Ty>' que se está compilando
1> with
1> [
1> _Ty=Class::Variable
1> ]
1>
1>ERROR al compilar.
1>
1>Tiempo transcurrido 00:00:01.09
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========
Пожалуйста, вы можете использовать онлайн-сервис для его перевода наанглийский с испанского, если вам нужно.