error C2664: “std::list<_Ty>::list(const std::allocator<_Ty> &)”: 不能将参数 1 从 “std::vector<_Ty>”转换为“const std::allocator<_Ty> &”
清泛原创
错误日志:
error C2664: “std::list<_Ty>::list(const std::allocator<_Ty> &)”: 不能将参数 1 从
“std::vector<_Ty>”转换为“const std::allocator<_Ty> &”
with
[
_Ty=int
]
原因如下: 无法从“std::vector<_Ty>”转换为“const std::allocator<_Ty>”
with
[
_Ty=int
]
没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
prog33.cpp(13) : error C2664: “std::vector<_Ty>::vector(const std::allocator<_Ty> &)”: 不能将参数
1 从“std::vector<_Ty>”转换为“const std::allocator<_Ty> &”
with
[
_Ty=double
]
and
[
_Ty=int
]
and
[
_Ty=double
]
原因如下: 无法从“std::vector<_Ty>”转换为“const std::allocator<_Ty>”
with
[
_Ty=int
]
and
[
_Ty=double
]
没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
出错代码:
#include <iostream>
#include <vector>
#include <list>
using std::vector;
using std::list;
using std::cout;
//容器初始化举例
int main()
{
vector<int> ivec;//使用默认构造函数
vector<int> ivec2(ivec);//初始化为同型容器的副本
list<int> ilist(ivec);//错误,容器类型不同
vector<double> dvec(ivec);//错误,容器元素类型不同
return 0;
}
解决办法: c++标准库中不允许容器初始化为不同类型或者容器元素类型不同的容器的副本。如果需要从其他容器的元素初始化容器,可以使用一对迭代范围的构造函数初始化。例如:
vector<int> ivec;
list<int> ilist(ivec.begin(),ivec.end());
vector<double> dvec(ivec.begin(),ivec.end());
上一篇:与复制构造函数相关的错误.例如:0x77D9FCAA (ntdll.dll) (prog31.exe 中)处有未经处理的异常: 0xC0000374:堆已损坏。 (参数: 0x77DC6668)
下一篇:与迭代器失效相关的错误,例如:0x008D1127 处有未经处理的异常(在 prog34.exe 中): 0xC0000005: 读取位置 0x010AC000 时发生访问冲突。