я получаю сообщение об ошибке с помощью следующего кода в VS2013 ...станд :: вектор <станд :: unique_ptr <X>> Проблемы переменного члена вызывает
class Bob
{
private:
std::vector<std::unique_ptr<UnrelatedClass>> _aVector;
inline Bob(const Bob & other) {};
inline Bob & operator=(const Bob & other) { return *this; };
public:
Bob();
~Bob();
Bob(Bob && o);
};
class Fred
{
friend class Bob;
[... A few functions, Bob never used ...]
};
... который отлично компилируется с удалением friend class Bob;
. Это ошибка компилятора? Я не уверен, что я делаю неправильно.
Ошибка заключается в следующем:
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(615): error C2248: 'std::unique_ptr<Unrelated,std::default_delete<_Ty>>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<Unrelated,std::default_delete<_Ty>>'
with
[
_Ty=Unrelated
]
c:\program files (x86)\microsoft visual studio 12.0\vc\include\memory(1487) : see declaration of 'std::unique_ptr<Unrelated,std::default_delete<_Ty>>::unique_ptr'
with
[
_Ty=Unrelated
]
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(614) : while compiling class template member function 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)'
with
[
_Ty=std::unique_ptr<Unrelated,std::default_delete<Unrelated>>
]
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(752) : see reference to function template instantiation 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)' being compiled
with
[
_Ty=std::unique_ptr<Unrelated,std::default_delete<Unrelated>>
]
c:\program files (x86)\microsoft visual studio 12.0\vc\include\type_traits(580) : see reference to class template instantiation 'std::allocator<_Ty>' being compiled
with
[
_Ty=std::unique_ptr<Unrelated,std::default_delete<Unrelated>>
]
c:\program files (x86)\microsoft visual studio 12.0\vc\include\vector(650) : see reference to class template instantiation 'std::is_empty<_Alloc>' being compiled
with
[
_Alloc=std::allocator<std::unique_ptr<Unrelated,std::default_delete<Unrelated>>>
]
c:\...\include\bob.h(51) : see reference to class template instantiation 'std::vector<std::unique_ptr<Unrelated,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>' being compiled
with
[
_Ty=Unrelated
]
исследования привели меня, чтобы понять это та же ошибка возникает, когда Bob
копируется. Поэтому копирование std::vector
, поэтому копирование std::unique_ptr
I гарантируем, что он не «компилирует штраф», так как вы не видите точку с запятой повсюду. Этот код - ложь. –
2 недостающих полуколонии. Исправлена. Вы можете мне помочь? – AStupidNoob
«Я получаю сообщение об ошибке ...» - *** ЧТО ОШИБКА ВЫ ПОЛУЧИТЕ? *** –