Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套boost::assign:Visual Studio 2012中的断开列表\u-对重载函数的不明确调用_C++_Boost_Visual Studio 2012 - Fatal编程技术网

C++ 嵌套boost::assign:Visual Studio 2012中的断开列表\u-对重载函数的不明确调用

C++ 嵌套boost::assign:Visual Studio 2012中的断开列表\u-对重载函数的不明确调用,c++,boost,visual-studio-2012,C++,Boost,Visual Studio 2012,这在Visual Studio 2010中有效,但在2012更新2(使用Boost 1.5.3)中不起作用: vector data=assign::list_of(assign::list_of(0x06)(0x02)); 编译器给出的错误(已更新): C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0(617):错误C2668:'std::vector::vector':对重载函数的调用不明确 具有 [

这在Visual Studio 2010中有效,但在2012更新2(使用Boost 1.5.3)中不起作用:

vector data=assign::list_of(assign::list_of(0x06)(0x02));
编译器给出的错误(已更新):

C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0(617):错误C2668:'std::vector::vector':对重载函数的调用不明确
具有
[
_Ty=字节
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\vector(786):可以是“std::vector::vector(std::vector&&)”
具有
[
_Ty=字节
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\vector(693):或“std::vector::vector(unsigned)\uuuu int64”
具有
[
_Ty=字节
]
尝试匹配参数列表时“(boost::assign_detail::generic_list)”
具有
[
T=int
]
... (还有几十行)

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

我没有VC11,所以只是随便猜测一下。。。VC11可能会混淆,因为您的整数可以转换为
BYTE
,因此将使用move构造函数,或者转换为
size\t
,因此将使用
std::vector(size\t)
构造函数

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

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

我认为问题不在于嵌入,而在于使用列表创建临时值。这应该是可行的:

vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
vector temp=assign::list_of(0x06)(0x02);
向量数据=分配::列表(临时);

您需要帮助boost::assign::list\u使用一些模板参数:

// 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));
//C2668:
标准::向量foo1=
boost::assign::list_of(boost::assign::list_of(0)(1));
//编号C2668:
标准::向量foo2=
boost::assign::list_of(boost::assign::list_of(0)(1));

请列出编译器中可能的匹配项output@AndyT:我添加了更多编译器的输出。虽然没有太大帮助,但相关:VS12应该支持初始值设定项列表。您可以在不使用Boost.Assign的情况下编写该代码。@pmr:VS12 Update 1支持初始值设定项列表,但标准库尚未调整,因此IL无法与vector一起使用。不幸的是,这没有帮助。VS12仍然表示“对重载函数的调用不明确”。
vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
// 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));