0

这适用于 Visual Studio 2010,但不适用于 2012 Update 2(使用 Boost 1.5.3):

vector<vector<BYTE>> data = assign::list_of (assign::list_of (0x06)(0x02));

编译器给出的错误(更新):

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0(617): error C2668: 'std::vector<_Ty>::vector' : ambiguous call to overloaded function
   with
   [
       _Ty=BYTE
   ]
   C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(786): could be 'std::vector<_Ty>::vector(std::vector<_Ty> &&)'
   with
   [
       _Ty=BYTE
   ]
   C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(693): or       'std::vector<_Ty>::vector(unsigned __int64)'
   with
   [
       _Ty=BYTE
   ]
   while trying to match the argument list '(boost::assign_detail::generic_list<T>)'
   with
   [
   T=int
   ]
... (dozens of more lines)

有什么办法可以解决这个错误?

4

3 回答 3

1

我认为问题不是来自嵌入,而是来自使用 list_of 创建一个临时值。那应该工作:

vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
于 2015-11-24T19:23:00.223 回答
0

我没有 VC11,所以只是一个疯狂的猜测......可能 VC11 很困惑,因为您的整数可以转换为BYTE,因此将使用 move-constructor 或 to size_t,因此std::vector(size_t)将使用构造函数。

请尝试转换为BYTE自己以避免隐式转换:

vector<vector<BYTE>> data = assign::list_of (assign::list_of (static_cast<BYTE>(0x06))(static_cast<BYTE>(0x02)));
于 2013-05-13T11:02:41.093 回答
0

您需要使用模板参数帮助 boost::assign::list_of :

// C2668:
std::vector<std::vector<int>> foo1 = 
  boost::assign::list_of(boost::assign::list_of(0)(1));

// no C2668:
std::vector<std::vector<int>> foo2 = 
  boost::assign::list_of<std::vector<int>>(boost::assign::list_of(0)(1));
于 2017-01-18T12:59:26.697 回答