我正在尝试创建一对,其中一对中的一个是参考。如果我尝试为这一对设置一个唯一的ptr,我会从实用程序中收到一条错误消息,指出无法将int转换为int&。
我明白我没有一个默认的构造对,但是我的意图(通过把它放在一个ptr中)只是在我有一些东西用于引用时才新建它。
unique_ptr<pair<int, int&>> uptr; // Full error posted below
shared_ptr<pair<int, int&>> sptr; // Compiles fine
完全错误:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(145) : error C2440: 'initializing' : cannot convert from 'int' to 'int &'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(142) : while compiling class template member function 'std::_Pair_base<_Ty1,_Ty2>::_Pair_base(int &&,int &&)'
with
[
_Ty1=int,
_Ty2=int &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(174) : see reference to class template instantiation 'std::_Pair_base<_Ty1,_Ty2>' being compiled
with
[
_Ty1=int,
_Ty2=int &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2161) : see reference to class template instantiation 'std::pair<_Ty1,_Ty2>' being compiled
with
[
_Ty1=int,
_Ty2=int &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2195) : see reference to class template instantiation 'std::_Unique_ptr_base<_Ty,_Dx,_Empty_deleter>' being compiled
with
[
_Ty=std::pair<int,int &>,
_Dx=std::default_delete<std::pair<int,int &>>,
_Empty_deleter=true
]
myClass.h(99) : see reference to class template instantiation 'std::unique_ptr<_Ty>' being compiled
with
[
_Ty=std::pair<int,int &>
]
我原本以为这会编译,并且无法解决为什么在这一行上初始化的原因,或者非ref int来自哪里。