error C2664: “std::list<_Ty>::list(const std::allocator<_Ty> &)”: 不能将参数 1 从 “std::vector<_Ty>”转换为“const std::allocator<_Ty> &”

来源:清泛原创     2016-10-24 17:30:32    人气:     我有话说( 0 人参与)

错误日志:error C2664: std::list<_Ty>::list(const std::allocator<_Ty> &): 不能将参数 1 从std::vector<_Ty>转换为const std::...

错误日志:
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());

error C2664 allocator

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: